From 15ce96a6ebbe0bca93fac5a2527f7c6925aaba6f Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 25 Jan 2016 22:56:34 +0100 Subject: [PATCH] Prevent failures in the "scanning for endstream" code, in `Parser_makeStream`, by handling the case where 'endstream' is split between contiguous chunks (issue 1536) --- src/core/parser.js | 25 ++++++++++++------------- test/pdfs/issue1536.pdf.link | 1 + test/pdfs/issue2098.pdf.link | 1 + test/test_manifest.json | 18 ++++++++++++++++++ 4 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 test/pdfs/issue1536.pdf.link create mode 100644 test/pdfs/issue2098.pdf.link diff --git a/src/core/parser.js b/src/core/parser.js index 71ec89efb..a6cf10c4b 100644 --- a/src/core/parser.js +++ b/src/core/parser.js @@ -488,23 +488,22 @@ var Parser = (function ParserClosure() { break; } found = false; - for (i = 0, j = 0; i < scanLength; i++) { - var b = scanBytes[i]; - if (b !== ENDSTREAM_SIGNATURE[j]) { - i -= j; - j = 0; - } else { + i = 0; + while (i < scanLength) { + j = 0; + while (j < ENDSTREAM_SIGNATURE_LENGTH && + scanBytes[i + j] === ENDSTREAM_SIGNATURE[j]) { j++; - if (j >= ENDSTREAM_SIGNATURE_LENGTH) { - i++; - found = true; - break; - } } + if (j >= ENDSTREAM_SIGNATURE_LENGTH) { + found = true; + break; + } + i++; } if (found) { - skipped += i - ENDSTREAM_SIGNATURE_LENGTH; - stream.pos += i - ENDSTREAM_SIGNATURE_LENGTH; + skipped += i; + stream.pos += i; break; } skipped += scanLength; diff --git a/test/pdfs/issue1536.pdf.link b/test/pdfs/issue1536.pdf.link new file mode 100644 index 000000000..c0af4853a --- /dev/null +++ b/test/pdfs/issue1536.pdf.link @@ -0,0 +1 @@ +http://web.archive.org/web/20150922201828/http://w2.eff.org/legal/cases/betamax/betamax_oral_argument2.pdf diff --git a/test/pdfs/issue2098.pdf.link b/test/pdfs/issue2098.pdf.link new file mode 100644 index 000000000..c48db8860 --- /dev/null +++ b/test/pdfs/issue2098.pdf.link @@ -0,0 +1 @@ +http://web.archive.org/web/20160125220711/http://www.star.bnl.gov/public/daq/HARDWARE/21264_data_sheet.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index 7e664a504..249b01805 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -921,6 +921,24 @@ "rounds": 1, "type": "eq" }, + { "id": "issue1536", + "file": "pdfs/issue1536.pdf", + "md5": "bcaa52e6216399592ad5aa9fc49f1436", + "rounds": 1, + "link": true, + "firstPage": 6, + "lastPage": 6, + "type": "eq" + }, + { "id": "issue2098", + "file": "pdfs/issue2098.pdf", + "md5": "e9fa2b7cb935ffb95b510322d1e047e1", + "rounds": 1, + "link": true, + "firstPage": 1, + "lastPage": 1, + "type": "eq" + }, { "id": "bpl13210", "file": "pdfs/bpl13210.pdf", "md5": "8a08512baa9fa95378d9ad4b995947c7",