Merge pull request #9426 from Snuffleupagus/issue-9425

Attempt to find the next valid marker when encountering invalid image data in `JpegImage.parse` (issue 9425)
This commit is contained in:
Tim van der Meij 2018-02-03 18:46:38 +01:00 committed by GitHub
commit 695a909a93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 5 deletions

View File

@ -369,7 +369,7 @@ var JpegImage = (function JpegImageClosure() {
// Some bad images seem to pad Scan blocks with e.g. zero bytes, skip past
// those to attempt to find a valid marker (fixes issue4090.pdf).
if (fileMarker && fileMarker.invalid) {
warn('decodeScan - unexpected MCU data, next marker is: ' +
warn('decodeScan - unexpected MCU data, current marker is: ' +
fileMarker.invalid);
offset = fileMarker.offset;
}
@ -389,7 +389,7 @@ var JpegImage = (function JpegImageClosure() {
// Some images include more Scan blocks than expected, skip past those and
// attempt to find the next valid marker (fixes issue8182.pdf).
if (fileMarker && fileMarker.invalid) {
warn('decodeScan - unexpected Scan data, next marker is: ' +
warn('decodeScan - unexpected Scan data, current marker is: ' +
fileMarker.invalid);
offset = fileMarker.offset;
}
@ -601,12 +601,12 @@ var JpegImage = (function JpegImageClosure() {
return component.blockData;
}
function findNextFileMarker(data, currentPos, startPos) {
function findNextFileMarker(data, currentPos, startPos = currentPos) {
function peekUint16(pos) {
return (data[pos] << 8) | data[pos + 1];
}
var maxPos = data.length - 1;
const maxPos = data.length - 1;
var newPos = startPos < currentPos ? startPos : currentPos;
if (currentPos >= maxPos) {
@ -649,7 +649,7 @@ var JpegImage = (function JpegImageClosure() {
var fileMarker = findNextFileMarker(data, endOffset, offset);
if (fileMarker && fileMarker.invalid) {
warn('readDataBlock - incorrect length, next marker is: ' +
warn('readDataBlock - incorrect length, current marker is: ' +
fileMarker.invalid);
endOffset = fileMarker.offset;
}
@ -874,6 +874,13 @@ var JpegImage = (function JpegImageClosure() {
offset -= 3;
break;
}
let nextFileMarker = findNextFileMarker(data, offset - 2);
if (nextFileMarker && nextFileMarker.invalid) {
warn('JpegImage.parse - unexpected data, current marker is: ' +
nextFileMarker.invalid);
offset = nextFileMarker.offset;
break;
}
throw new JpegError('unknown marker ' + fileMarker.toString(16));
}
fileMarker = readUint16();

View File

@ -0,0 +1 @@
https://github.com/mozilla/pdf.js/files/1682471/Test.pdf

View File

@ -860,6 +860,14 @@
"lastPage": 1,
"type": "eq"
},
{ "id": "issue9425",
"file": "pdfs/issue9425.pdf",
"md5": "cb5e99c9ada308304ca2dfcb7f72e3a0",
"rounds": 1,
"link": true,
"lastPage": 1,
"type": "eq"
},
{ "id": "txt2pdf",
"file": "pdfs/txt2pdf.pdf",
"md5": "02cefa0f5e8d96313bb05163b2f88c8c",