diff --git a/bower.json b/bower.json index 8e50de840..bd1ded457 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.0.765", + "version": "1.0.768", "keywords": [ "Mozilla", "pdf", diff --git a/build/pdf.combined.js b/build/pdf.combined.js index 3ce68e900..fa3134a91 100644 --- a/build/pdf.combined.js +++ b/build/pdf.combined.js @@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.0.765'; -PDFJS.build = 'fd4134c'; +PDFJS.version = '1.0.768'; +PDFJS.build = '0d72784'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it @@ -8004,6 +8004,12 @@ var ChunkedStream = (function ChunkedStreamClosure() { return bytes.subarray(pos, end); }, + peekByte: function ChunkedStream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, + peekBytes: function ChunkedStream_peekBytes(length) { var bytes = this.getBytes(length); this.pos -= bytes.length; @@ -36129,6 +36135,22 @@ var Parser = (function ParserClosure() { return new LZWStream(stream, maybeLength, earlyChange); } if (name === 'DCTDecode' || name === 'DCT') { + // According to the specification: for inline images, the ID operator + // shall be followed by a single whitespace character (unless it uses + // ASCII85Decode or ASCIIHexDecode filters). + // In practice this only seems to be followed for inline JPEG images, + // and generally ignoring the first byte of the stream if it is a + // whitespace char can even *cause* issues (e.g. in the CCITTFaxDecode + // filters used in issue2984.pdf). + // Hence when the first byte of the stream of an inline JPEG image is + // a whitespace character, we thus simply skip over it. + if (isCmd(this.buf1, 'ID')) { + var firstByte = stream.peekByte(); + if (firstByte === 0x0A /* LF */ || firstByte === 0x0D /* CR */ || + firstByte === 0x20 /* SPACE */) { + stream.skip(); + } + } xrefStreamStats[StreamType.DCT] = true; return new JpegStream(stream, maybeLength, stream.dict, this.xref); } @@ -36235,7 +36257,7 @@ var Lexer = (function LexerClosure() { return (this.currentChar = this.stream.getByte()); }, peekChar: function Lexer_peekChar() { - return this.stream.peekBytes(1)[0]; + return this.stream.peekByte(); }, getNumber: function Lexer_getNumber() { var ch = this.currentChar; @@ -36892,6 +36914,11 @@ var Stream = (function StreamClosure() { this.pos = end; return bytes.subarray(pos, end); }, + peekByte: function Stream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, peekBytes: function Stream_peekBytes(length) { var bytes = this.getBytes(length); this.pos -= bytes.length; @@ -37021,6 +37048,11 @@ var DecodeStream = (function DecodeStreamClosure() { this.pos = end; return this.buffer.subarray(pos, end); }, + peekByte: function DecodeStream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, peekBytes: function DecodeStream_peekBytes(length) { var bytes = this.getBytes(length); this.pos -= bytes.length; @@ -37346,7 +37378,7 @@ var FlateStream = (function FlateStreamClosure() { var end = bufferLength + blockLen; this.bufferLength = end; if (blockLen === 0) { - if (str.peekBytes(1).length === 0) { + if (str.peekByte() === -1) { this.eof = true; } } else { diff --git a/build/pdf.js b/build/pdf.js index bdeb152a2..491d8e152 100644 --- a/build/pdf.js +++ b/build/pdf.js @@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.0.765'; -PDFJS.build = 'fd4134c'; +PDFJS.version = '1.0.768'; +PDFJS.build = '0d72784'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it diff --git a/build/pdf.worker.js b/build/pdf.worker.js index e322128f3..ce296fc72 100644 --- a/build/pdf.worker.js +++ b/build/pdf.worker.js @@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.0.765'; -PDFJS.build = 'fd4134c'; +PDFJS.version = '1.0.768'; +PDFJS.build = '0d72784'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it @@ -1969,6 +1969,12 @@ var ChunkedStream = (function ChunkedStreamClosure() { return bytes.subarray(pos, end); }, + peekByte: function ChunkedStream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, + peekBytes: function ChunkedStream_peekBytes(length) { var bytes = this.getBytes(length); this.pos -= bytes.length; @@ -30094,6 +30100,22 @@ var Parser = (function ParserClosure() { return new LZWStream(stream, maybeLength, earlyChange); } if (name === 'DCTDecode' || name === 'DCT') { + // According to the specification: for inline images, the ID operator + // shall be followed by a single whitespace character (unless it uses + // ASCII85Decode or ASCIIHexDecode filters). + // In practice this only seems to be followed for inline JPEG images, + // and generally ignoring the first byte of the stream if it is a + // whitespace char can even *cause* issues (e.g. in the CCITTFaxDecode + // filters used in issue2984.pdf). + // Hence when the first byte of the stream of an inline JPEG image is + // a whitespace character, we thus simply skip over it. + if (isCmd(this.buf1, 'ID')) { + var firstByte = stream.peekByte(); + if (firstByte === 0x0A /* LF */ || firstByte === 0x0D /* CR */ || + firstByte === 0x20 /* SPACE */) { + stream.skip(); + } + } xrefStreamStats[StreamType.DCT] = true; return new JpegStream(stream, maybeLength, stream.dict, this.xref); } @@ -30200,7 +30222,7 @@ var Lexer = (function LexerClosure() { return (this.currentChar = this.stream.getByte()); }, peekChar: function Lexer_peekChar() { - return this.stream.peekBytes(1)[0]; + return this.stream.peekByte(); }, getNumber: function Lexer_getNumber() { var ch = this.currentChar; @@ -30857,6 +30879,11 @@ var Stream = (function StreamClosure() { this.pos = end; return bytes.subarray(pos, end); }, + peekByte: function Stream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, peekBytes: function Stream_peekBytes(length) { var bytes = this.getBytes(length); this.pos -= bytes.length; @@ -30986,6 +31013,11 @@ var DecodeStream = (function DecodeStreamClosure() { this.pos = end; return this.buffer.subarray(pos, end); }, + peekByte: function DecodeStream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, peekBytes: function DecodeStream_peekBytes(length) { var bytes = this.getBytes(length); this.pos -= bytes.length; @@ -31311,7 +31343,7 @@ var FlateStream = (function FlateStreamClosure() { var end = bufferLength + blockLen; this.bufferLength = end; if (blockLen === 0) { - if (str.peekBytes(1).length === 0) { + if (str.peekByte() === -1) { this.eof = true; } } else { diff --git a/package.json b/package.json index 949f52d40..34111a55e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.0.765", + "version": "1.0.768", "description": "Generic build of Mozilla's PDF.js library.", "keywords": [ "Mozilla",