mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
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:
parent
b2ed788ea3
commit
be1a6f294f
3 changed files with 30 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue