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:
commit
695a909a93
@ -369,7 +369,7 @@ var JpegImage = (function JpegImageClosure() {
|
|||||||
// Some bad images seem to pad Scan blocks with e.g. zero bytes, skip past
|
// 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).
|
// those to attempt to find a valid marker (fixes issue4090.pdf).
|
||||||
if (fileMarker && fileMarker.invalid) {
|
if (fileMarker && fileMarker.invalid) {
|
||||||
warn('decodeScan - unexpected MCU data, next marker is: ' +
|
warn('decodeScan - unexpected MCU data, current marker is: ' +
|
||||||
fileMarker.invalid);
|
fileMarker.invalid);
|
||||||
offset = fileMarker.offset;
|
offset = fileMarker.offset;
|
||||||
}
|
}
|
||||||
@ -389,7 +389,7 @@ var JpegImage = (function JpegImageClosure() {
|
|||||||
// Some images include more Scan blocks than expected, skip past those and
|
// Some images include more Scan blocks than expected, skip past those and
|
||||||
// attempt to find the next valid marker (fixes issue8182.pdf).
|
// attempt to find the next valid marker (fixes issue8182.pdf).
|
||||||
if (fileMarker && fileMarker.invalid) {
|
if (fileMarker && fileMarker.invalid) {
|
||||||
warn('decodeScan - unexpected Scan data, next marker is: ' +
|
warn('decodeScan - unexpected Scan data, current marker is: ' +
|
||||||
fileMarker.invalid);
|
fileMarker.invalid);
|
||||||
offset = fileMarker.offset;
|
offset = fileMarker.offset;
|
||||||
}
|
}
|
||||||
@ -601,12 +601,12 @@ var JpegImage = (function JpegImageClosure() {
|
|||||||
return component.blockData;
|
return component.blockData;
|
||||||
}
|
}
|
||||||
|
|
||||||
function findNextFileMarker(data, currentPos, startPos) {
|
function findNextFileMarker(data, currentPos, startPos = currentPos) {
|
||||||
function peekUint16(pos) {
|
function peekUint16(pos) {
|
||||||
return (data[pos] << 8) | data[pos + 1];
|
return (data[pos] << 8) | data[pos + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
var maxPos = data.length - 1;
|
const maxPos = data.length - 1;
|
||||||
var newPos = startPos < currentPos ? startPos : currentPos;
|
var newPos = startPos < currentPos ? startPos : currentPos;
|
||||||
|
|
||||||
if (currentPos >= maxPos) {
|
if (currentPos >= maxPos) {
|
||||||
@ -649,7 +649,7 @@ var JpegImage = (function JpegImageClosure() {
|
|||||||
|
|
||||||
var fileMarker = findNextFileMarker(data, endOffset, offset);
|
var fileMarker = findNextFileMarker(data, endOffset, offset);
|
||||||
if (fileMarker && fileMarker.invalid) {
|
if (fileMarker && fileMarker.invalid) {
|
||||||
warn('readDataBlock - incorrect length, next marker is: ' +
|
warn('readDataBlock - incorrect length, current marker is: ' +
|
||||||
fileMarker.invalid);
|
fileMarker.invalid);
|
||||||
endOffset = fileMarker.offset;
|
endOffset = fileMarker.offset;
|
||||||
}
|
}
|
||||||
@ -874,6 +874,13 @@ var JpegImage = (function JpegImageClosure() {
|
|||||||
offset -= 3;
|
offset -= 3;
|
||||||
break;
|
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));
|
throw new JpegError('unknown marker ' + fileMarker.toString(16));
|
||||||
}
|
}
|
||||||
fileMarker = readUint16();
|
fileMarker = readUint16();
|
||||||
|
1
test/pdfs/issue9425.pdf.link
Normal file
1
test/pdfs/issue9425.pdf.link
Normal file
@ -0,0 +1 @@
|
|||||||
|
https://github.com/mozilla/pdf.js/files/1682471/Test.pdf
|
@ -860,6 +860,14 @@
|
|||||||
"lastPage": 1,
|
"lastPage": 1,
|
||||||
"type": "eq"
|
"type": "eq"
|
||||||
},
|
},
|
||||||
|
{ "id": "issue9425",
|
||||||
|
"file": "pdfs/issue9425.pdf",
|
||||||
|
"md5": "cb5e99c9ada308304ca2dfcb7f72e3a0",
|
||||||
|
"rounds": 1,
|
||||||
|
"link": true,
|
||||||
|
"lastPage": 1,
|
||||||
|
"type": "eq"
|
||||||
|
},
|
||||||
{ "id": "txt2pdf",
|
{ "id": "txt2pdf",
|
||||||
"file": "pdfs/txt2pdf.pdf",
|
"file": "pdfs/txt2pdf.pdf",
|
||||||
"md5": "02cefa0f5e8d96313bb05163b2f88c8c",
|
"md5": "02cefa0f5e8d96313bb05163b2f88c8c",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user