diff --git a/src/core/parser.js b/src/core/parser.js index 10b8b0c5f..c0a76bbb6 100644 --- a/src/core/parser.js +++ b/src/core/parser.js @@ -222,7 +222,18 @@ var Parser = (function ParserClosure() { stream.skip(-(stream.pos - maybeEIPos)); // Reset the stream position. } } - return ((stream.pos - 4) - startPos); + + let endOffset = 4; + stream.skip(-endOffset); // Set the stream position to just before "EI". + ch = stream.peekByte(); + stream.skip(endOffset); // ... and remember to reset the stream position. + + // Ensure that we don't accidentally truncate the inline image, when the + // data is immediately followed by the "EI" marker (fixes issue10388.pdf). + if (!isSpace(ch)) { + endOffset--; + } + return ((stream.pos - endOffset) - startPos); }, /** * Find the EOI (end-of-image) marker 0xFFD9 of the stream. diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index f1f0bd85c..ad6cec7f2 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -72,6 +72,7 @@ !issue9458.pdf !issue9915_reduced.pdf !issue9940.pdf +!issue10388_reduced.pdf !issue10438_reduced.pdf !bad-PageLabels.pdf !decodeACSuccessive.pdf diff --git a/test/pdfs/issue10388_reduced.pdf b/test/pdfs/issue10388_reduced.pdf new file mode 100644 index 000000000..44eac0d89 Binary files /dev/null and b/test/pdfs/issue10388_reduced.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index f3aaffd80..60c981d2b 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -739,6 +739,13 @@ "link": true, "type": "load" }, + { "id": "issue10388", + "file": "pdfs/issue10388_reduced.pdf", + "md5": "62a6b2adbea1535432bd94a3516e2d4c", + "rounds": 1, + "link": false, + "type": "eq" + }, { "id": "issue7507", "file": "pdfs/issue7507.pdf", "md5": "f7aeaafe0c89b94436e94eaa63307303",