From a22f0ae82092d9a15c737afd0418412a9bf06500 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sun, 25 Sep 2016 12:19:22 +0200 Subject: [PATCH] Only skip parsing a stream in `Parser_makeFilter` when we know for sure that it is empty (PR 6372 follow-up) For PDF files with multiple `/Filter`s, where the `/Length` entry is zero, we fail to render the file correctly. The reason is that `maybeLength` is `null` for the every filter except the first, and `!maybeLength` is thus truthy. Hence it seems that we should completely ignore the `/Length` entry and also explicitly check `maybeLength === 0`. Note that I've not (yet) come across a PDF file with this issue in the wild, but given all the stupid things PDF generators do I wouldn't be surprised if such a file actually exists. In order to prevent a possible future bug, I'm submitting this patch which includes a hand-edited PDF file that we currently cannot render correctly (but e.g. Adobe Reader can). --- src/core/parser.js | 5 ++++- test/pdfs/.gitignore | 1 + test/pdfs/multiple-filters-length-zero.pdf | Bin 0 -> 18374 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 test/pdfs/multiple-filters-length-zero.pdf diff --git a/src/core/parser.js b/src/core/parser.js index eeb42a00b..e828cec84 100644 --- a/src/core/parser.js +++ b/src/core/parser.js @@ -564,7 +564,10 @@ var Parser = (function ParserClosure() { return stream; }, makeFilter: function Parser_makeFilter(stream, name, maybeLength, params) { - if (stream.dict.get('Length') === 0 && !maybeLength) { + // Since the 'Length' entry in the stream dictionary can be completely + // wrong, e.g. zero for non-empty streams, only skip parsing the stream + // when we can be absolutely certain that it actually is empty. + if (maybeLength === 0) { warn('Empty "' + name + '" stream.'); return new NullStream(stream); } diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index cb7707886..53730d89d 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -65,6 +65,7 @@ !simpletype3font.pdf !sizes.pdf !javauninstall-7r.pdf +!multiple-filters-length-zero.pdf !issue3205r.pdf !issue3207r.pdf !issue3263r.pdf diff --git a/test/pdfs/multiple-filters-length-zero.pdf b/test/pdfs/multiple-filters-length-zero.pdf new file mode 100644 index 0000000000000000000000000000000000000000..721018a716eb75c0769446fe1ecd852b05c4f5f9 GIT binary patch literal 18374 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