Try to recover when encountering JPEG markers with too short marker lengths (issue 8169)

The issue with the JPEG image in question, is that the COM (Comment) marker has an incorrect length entry.

Fixes 8169.
This commit is contained in:
Jonas Jenwald 2017-03-17 10:29:08 +01:00
parent b2ed788ea3
commit be1a6f294f
3 changed files with 30 additions and 1 deletions

View File

@ -26,6 +26,7 @@
}
}(this, function (exports, sharedUtil) {
var warn = sharedUtil.warn;
var error = sharedUtil.error;
/**
@ -604,8 +605,28 @@ var JpegImage = (function JpegImageClosure() {
}
function readDataBlock() {
function isValidMarkerAt(pos) {
if (pos < data.length - 1) {
return (data[pos] === 0xFF &&
data[pos + 1] >= 0xC0 && data[pos + 1] <= 0xFE);
}
return true;
}
var length = readUint16();
var array = data.subarray(offset, offset + length - 2);
var endOffset = offset + length - 2;
if (!isValidMarkerAt(endOffset)) {
warn('readDataBlock - incorrect length, next marker is: ' +
(data[endOffset] << 8 | data[endOffset + 1]).toString('16'));
var pos = offset;
while (!isValidMarkerAt(pos)) {
pos++;
}
endOffset = pos;
}
var array = data.subarray(offset, endOffset);
offset += array.length;
return array;
}

View File

@ -0,0 +1 @@
http://web.archive.org/save/_embed/http://210.243.166.143/prob1.pdf

View File

@ -733,6 +733,13 @@
"link": false,
"type": "eq"
},
{ "id": "issue8169",
"file": "pdfs/issue8169.pdf",
"md5": "62fd6479f9e1c8c5ce8cba6b1781d0a5",
"rounds": 1,
"link": true,
"type": "eq"
},
{ "id": "txt2pdf",
"file": "pdfs/txt2pdf.pdf",
"md5": "02cefa0f5e8d96313bb05163b2f88c8c",