Skip to content

Commit

Permalink
Merge pull request #9730 from Snuffleupagus/jpeg-EOI-decodeScan
Browse files Browse the repository at this point in the history
Ignore the rest of the image when encountering an EOI (End of Image) marker while parsing Scan data (issue 9679)
  • Loading branch information
timvandermeij authored May 31, 2018
2 parents c2cbeaa + 83ff7d9 commit e39541a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 3 deletions.
23 changes: 20 additions & 3 deletions src/core/jpg.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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)}`);
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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;
}
Expand Down
1 change: 1 addition & 0 deletions test/pdfs/issue9679.pdf.link
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://github.com/mozilla/pdf.js/files/1929531/K.BIS.PDF
7 changes: 7 additions & 0 deletions test/test_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down

0 comments on commit e39541a

Please sign in to comment.