diff --git a/src/core/jpg.js b/src/core/jpg.js index 1e0c0c69c8041..7c29935b724be 100644 --- a/src/core/jpg.js +++ b/src/core/jpg.js @@ -41,6 +41,18 @@ let DNLMarkerError = (function DNLMarkerErrorClosure() { return DNLMarkerError; })(); +let EOIMarkerError = (function EOIMarkerErrorClosure() { + function EOIMarkerError(message) { + this.message = message; + } + + EOIMarkerError.prototype = new Error(); + EOIMarkerError.prototype.name = 'EOIMarkerError'; + EOIMarkerError.constructor = EOIMarkerError; + + return EOIMarkerError; +})(); + /** * This code was forked from https://github.com/notmasteryet/jpgjs. * The original version was created by GitHub user notmasteryet. @@ -148,6 +160,9 @@ var JpegImage = (function JpegImageClosure() { throw new DNLMarkerError( 'Found DNL marker (0xFFDC) while parsing scan data', scanLines); } + } else if (nextByte === 0xD9) { // EOI == 0xFFD9 + throw new EOIMarkerError( + 'Found EOI marker (0xFFD9) while parsing scan data'); } throw new JpegError( `unexpected marker ${((bitsData << 8) | nextByte).toString(16)}`); @@ -716,7 +731,7 @@ var JpegImage = (function JpegImageClosure() { } fileMarker = readUint16(); - while (fileMarker !== 0xFFD9) { // EOI (End of image) + markerLoop: while (fileMarker !== 0xFFD9) { // EOI (End of image) var i, j, l; switch (fileMarker) { case 0xFFE0: // APP0 (Application Specific) @@ -892,9 +907,11 @@ var JpegImage = (function JpegImageClosure() { offset += processed; } catch (ex) { if (ex instanceof DNLMarkerError) { - warn('Attempting to re-parse JPEG image using "scanLines" ' + - 'parameter found in DNL marker (0xFFDC) segment.'); + warn(`${ex.message} -- attempting to re-parse the JPEG image.`); return this.parse(data, { dnlScanLines: ex.scanLines, }); + } else if (ex instanceof EOIMarkerError) { + warn(`${ex.message} -- ignoring the rest of the image data.`); + break markerLoop; } throw ex; } diff --git a/test/pdfs/issue9679.pdf.link b/test/pdfs/issue9679.pdf.link new file mode 100644 index 0000000000000..ae96029c718b0 --- /dev/null +++ b/test/pdfs/issue9679.pdf.link @@ -0,0 +1 @@ +https://github.com/mozilla/pdf.js/files/1929531/K.BIS.PDF diff --git a/test/test_manifest.json b/test/test_manifest.json index cf155395355d1..6b8142274be5b 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -3223,6 +3223,13 @@ "lastPage": 1, "type": "eq" }, + { "id": "issue9679", + "file": "pdfs/issue9679.pdf", + "md5": "3077d06add3875705aa1021c7b116023", + "rounds": 1, + "link": true, + "type": "eq" + }, { "id": "bug1108753", "file": "pdfs/bug1108753.pdf", "md5": "a7aaf92d55b4602afb0ca3d75198b56b",