From f45dacf4cbfab73ce470d0a61d4acee14206ab2b Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sun, 7 Nov 2021 15:23:29 -0500 Subject: [PATCH] Make recovery logic flexible about where objects end (fixes #573) Don't assume endobj is at the beginning of the line. This means we are looking at tokens for every line, but the odds of n n obj appearing in the middle of the object are likely much lower than endobj not being at the beginning of the line or missing entirely. This will probably have a negative impact on recovery time for very large files. Hopefully it will be worth it. --- ChangeLog | 6 + libqpdf/QPDF.cc | 61 ++- qpdf/qtest/qpdf.test | 13 +- qpdf/qtest/qpdf/endobj-at-eol-fixed.pdf | Bin 0 -> 799 bytes qpdf/qtest/qpdf/endobj-at-eol.out | 4 + qpdf/qtest/qpdf/endobj-at-eol.pdf | Bin 0 -> 798 bytes qpdf/qtest/qpdf/issue-202.out | 1 + qpdf/qtest/qpdf/issue-335a.out | 513 +++++++++++++++++++++++- 8 files changed, 559 insertions(+), 39 deletions(-) create mode 100644 qpdf/qtest/qpdf/endobj-at-eol-fixed.pdf create mode 100644 qpdf/qtest/qpdf/endobj-at-eol.out create mode 100644 qpdf/qtest/qpdf/endobj-at-eol.pdf diff --git a/ChangeLog b/ChangeLog index a1319681..4f15b9aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2021-11-07 Jay Berkenbilt + + * Relax xref recovery logic a bit so that files whose objects are + either missing endobj or have endobj at other than the beginning + of a line can still be recovered. Fixes #573. + 2021-11-04 Jay Berkenbilt * Add support for OpenSSL 3. Fixes #568. diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 94161c08..4ce60ea2 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -590,7 +590,6 @@ QPDF::reconstruct_xref(QPDFExc& e) this->m->file->seek(0, SEEK_END); qpdf_offset_t eof = this->m->file->tell(); this->m->file->seek(0, SEEK_SET); - bool in_obj = false; qpdf_offset_t line_start = 0; // Don't allow very long tokens here during recovery. static size_t const MAX_LEN = 100; @@ -604,46 +603,36 @@ QPDF::reconstruct_xref(QPDFExc& e) this->m->file->tell() - toO(t1.getValue().length()); if (token_start >= next_line_start) { - // don't process yet + // don't process yet -- wait until we get to the line + // containing this token } - else if (in_obj) - { - if (t1 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "endobj")) - { - in_obj = false; - } - } - else + else if (t1.getType() == QPDFTokenizer::tt_integer) { - if (t1.getType() == QPDFTokenizer::tt_integer) + QPDFTokenizer::Token t2 = + readToken(this->m->file, MAX_LEN); + QPDFTokenizer::Token t3 = + readToken(this->m->file, MAX_LEN); + if ((t2.getType() == QPDFTokenizer::tt_integer) && + (t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj"))) { - QPDFTokenizer::Token t2 = - readToken(this->m->file, MAX_LEN); - QPDFTokenizer::Token t3 = - readToken(this->m->file, MAX_LEN); - if ((t2.getType() == QPDFTokenizer::tt_integer) && - (t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj"))) - { - in_obj = true; - int obj = QUtil::string_to_int(t1.getValue().c_str()); - int gen = QUtil::string_to_int(t2.getValue().c_str()); - insertXrefEntry(obj, 1, token_start, gen, true); - } + int obj = QUtil::string_to_int(t1.getValue().c_str()); + int gen = QUtil::string_to_int(t2.getValue().c_str()); + insertXrefEntry(obj, 1, token_start, gen, true); } - else if ((! this->m->trailer.isInitialized()) && - (t1 == QPDFTokenizer::Token( - QPDFTokenizer::tt_word, "trailer"))) - { - QPDFObjectHandle t = + } + else if ((! this->m->trailer.isInitialized()) && + (t1 == QPDFTokenizer::Token( + QPDFTokenizer::tt_word, "trailer"))) + { + QPDFObjectHandle t = readObject(this->m->file, "trailer", 0, 0, false); - if (! t.isDictionary()) - { - // Oh well. It was worth a try. - } - else - { - setTrailer(t); - } + if (! t.isDictionary()) + { + // Oh well. It was worth a try. + } + else + { + setTrailer(t); } } this->m->file->seek(next_line_start, SEEK_SET); diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test index af99bb2a..3c3283e9 100644 --- a/qpdf/qtest/qpdf.test +++ b/qpdf/qtest/qpdf.test @@ -3193,7 +3193,7 @@ $td->runtest("integer type checks", show_ntests(); # ---------- $td->notify("--- Recovery Tests ---"); -$n_tests += @badfiles + 9; +$n_tests += @badfiles + 11; # Recovery tests. These are mostly after-the-fact -- when recovery # was implemented, some degree of recovery was possible on many of the @@ -3268,11 +3268,20 @@ $td->runtest("xref loop with append", {$td->FILE => "append-xref-loop.out", $td->EXIT_STATUS => 3}, $td->NORMALIZE_NEWLINES); - $td->runtest("check output", {$td->FILE => "a.pdf"}, {$td->FILE => "append-xref-loop-fixed.pdf"}); +$td->runtest("endobj not at newline", + {$td->COMMAND => + "qpdf --deterministic-id endobj-at-eol.pdf a.pdf"}, + {$td->FILE => "endobj-at-eol.out", + $td->EXIT_STATUS => 3}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "a.pdf"}, + {$td->FILE => "endobj-at-eol-fixed.pdf"}); + show_ntests(); # ---------- $td->notify("--- Basic Parsing Tests ---"); diff --git a/qpdf/qtest/qpdf/endobj-at-eol-fixed.pdf b/qpdf/qtest/qpdf/endobj-at-eol-fixed.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b39ac1cad7ae03e151bbf017106f661aba0da1f8 GIT binary patch literal 799 zcmZWnOODe(5alDJV2L{v64?R%|D?!*nT$omFC>vzL|L@m8r66_Gw_Bckt-q^3}RlWDBhtqL<$GmH6!!N%-{n1P?piEwBqY>y+w#FJP zLS~>Z-o8T6kC|jexrQjxP;gbKjyu9}xe*df&>!Z!h9%eyb=8sEemzwk_f#QK$Qqn> z++*Z9J1V!-#h}+SE$~ANsMnNLRM^RyVO?&jlyoY^aY-l5hY4=eD2j+tmFXNMczdKZ zqxAgaL{0AG#CajHqJ{;NIL5T(Wd0F~wR{0iph&f>kezDVkF|C_n|^;|FAVG1U~={I zw-4`k_io<0w)-*I>66=MKNo|uU)7ECE0?}rzP_W>E|?ejDVg2WBUWQ$L4Sb7Ym|A) zKtB;QJr`@xpXcJfsPi6p!cIw6Oo7igiEI|6oY8-4u<6z3t^BJ|ONwM1QxR?@thz;R zE6g+le9hQD;JL2tLI!)xB)RGV(PJJ3cYv7|?e+k(Jeq%i*}?x@C!{;r)yazG1ua7D zbXJz?ay7Scp1(uzL7$9aIdYuD@`8*z9tM7pxweT(7#ci4FH2M3i$-W<+%~wwL))+r heTO?}2AKGU>j%EgqgA_7R>>v?*D|%?@Z@Q%{RPiV-WC7= literal 0 HcmV?d00001 diff --git a/qpdf/qtest/qpdf/endobj-at-eol.out b/qpdf/qtest/qpdf/endobj-at-eol.out new file mode 100644 index 00000000..f1eaafbe --- /dev/null +++ b/qpdf/qtest/qpdf/endobj-at-eol.out @@ -0,0 +1,4 @@ +WARNING: endobj-at-eol.pdf: file is damaged +WARNING: endobj-at-eol.pdf (offset 523): xref not found +WARNING: endobj-at-eol.pdf: Attempting to reconstruct cross-reference table +qpdf: operation succeeded with warnings; resulting file may have some problems diff --git a/qpdf/qtest/qpdf/endobj-at-eol.pdf b/qpdf/qtest/qpdf/endobj-at-eol.pdf new file mode 100644 index 0000000000000000000000000000000000000000..38dac8b26b6be4b72fe87d3a90ec131fdea4fdbb GIT binary patch literal 798 zcmah|OODe(5alDJ&=PkjB(eki|3r!`n8{c~{6Z3mMU+LyE(aq|_sH%*V8sQv0V|Hc z1=wbUkXXTbxCA>ywG+oEEU*{0U)QU8^{U(*4dOf2U59l)|N8iwSzv-(ykz}87$d&K z3T#5gU`*efAsEM8@j@;kiWrJi2kPU7a4c6sfd$6HJgr~`PEDOR= 1.2 +WARNING: issue-335a.pdf (trailer, offset 19875): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19875): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 16793): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19808): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19810): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19872): name with stray # will not work with PDF >= 1.2 +WARNING: issue-335a.pdf (trailer, offset 19875): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19876): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19956): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19956): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 16806): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 16821): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19808): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19810): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19872): name with stray # will not work with PDF >= 1.2 +WARNING: issue-335a.pdf (trailer, offset 19875): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19876): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19876): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 16819): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 16820): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 16821): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19808): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19810): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19872): name with stray # will not work with PDF >= 1.2 +WARNING: issue-335a.pdf (trailer, offset 19875): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19875): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 19837): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 19838): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19871): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19872): name with stray # will not work with PDF >= 1.2 +WARNING: issue-335a.pdf (trailer, offset 19875): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19876): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19956): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19956): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 19852): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19869): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19870): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19871): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19872): name with stray # will not work with PDF >= 1.2 +WARNING: issue-335a.pdf (trailer, offset 19875): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19876): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19876): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 19867): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 19868): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19869): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19870): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19871): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19872): name with stray # will not work with PDF >= 1.2 +WARNING: issue-335a.pdf (trailer, offset 19875): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19875): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 19890): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19906): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19956): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19959): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19968): invalid character (t) in hexstring +WARNING: issue-335a.pdf (trailer, offset 19971): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19971): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 19904): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 19905): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19906): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19956): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19959): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19968): invalid character (t) in hexstring +WARNING: issue-335a.pdf (trailer, offset 19968): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 19920): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19954): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 19956): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19959): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19968): invalid character (t) in hexstring +WARNING: issue-335a.pdf (trailer, offset 19971): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 19971): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 19968): invalid character (t) in hexstring +WARNING: issue-335a.pdf (trailer, offset 19971): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20092): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20103): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20110): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20114): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20114): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 20164): unexpected > +WARNING: issue-335a.pdf (trailer, offset 20170): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20173): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20186): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20189): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20219): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20219): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 20230): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20232): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 20233): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 20234): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20236): invalid character ({) in hexstring +WARNING: issue-335a.pdf (trailer, offset 20238): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 20238): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 20424): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20431): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20446): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20601): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 20602): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20604): invalid character ({) in hexstring +WARNING: issue-335a.pdf (trailer, offset 20604): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 20446): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20601): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 20602): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20604): invalid character ({) in hexstring +WARNING: issue-335a.pdf (trailer, offset 20606): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 20607): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 20607): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 20598): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20600): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 20601): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 20602): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20604): invalid character ({) in hexstring +WARNING: issue-335a.pdf (trailer, offset 20606): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 20606): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 20684): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20683): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 20748): stream keyword followed by extraneous whitespace +WARNING: issue-335a.pdf (trailer, offset 20679): stream dictionary lacks /Length key +WARNING: issue-335a.pdf (trailer, offset 20749): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 20749): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 20756): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 20787): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 20787): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 20812): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20803): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 20803): dictionary has duplicated key /Length; last occurrence overrides earlier ones +WARNING: issue-335a.pdf (trailer, offset 20843): stream keyword followed by extraneous whitespace +WARNING: issue-335a.pdf (trailer, offset 20800): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 20844): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 20844): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 20851): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 20882): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 20882): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 20914): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20898): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 20895): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 20929): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 20929): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 20949): unexpected > +WARNING: issue-335a.pdf (trailer, offset 20957): unexpected > +WARNING: issue-335a.pdf (trailer, offset 20958): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20960): unexpected > +WARNING: issue-335a.pdf (trailer, offset 20961): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 20972): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 20973): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 20973): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21042): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21026): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 21023): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 21057): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 21057): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 21077): unexpected > +WARNING: issue-335a.pdf (trailer, offset 21085): unexpected > +WARNING: issue-335a.pdf (trailer, offset 21086): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21088): unexpected > +WARNING: issue-335a.pdf (trailer, offset 21089): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21100): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 21101): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21101): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21118): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21158): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21202): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21205): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 21207): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21212): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21212): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21132): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21138): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21156): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21157): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21158): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21202): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21202): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21154): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 21155): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21156): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21157): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21158): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21202): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21202): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21172): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21199): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21201): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21202): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21205): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 21207): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21207): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21228): treating unexpected brace token as null +WARNING: issue-335a.pdf (trailer, offset 21229): unexpected ) +WARNING: issue-335a.pdf (trailer, offset 21230): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21262): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21267): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21277): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21277): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21277): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21287): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21389): unexpected dictionary close token +WARNING: issue-335a.pdf (trailer, offset 21392): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21400): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21430): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21438): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21441): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21444): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21452): invalid character (-) in hexstring +WARNING: issue-335a.pdf (trailer, offset 21819): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21819): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21287): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21389): unexpected dictionary close token +WARNING: issue-335a.pdf (trailer, offset 21392): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21400): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21430): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21438): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21441): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21444): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21452): invalid character (-) in hexstring +WARNING: issue-335a.pdf (trailer, offset 21819): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21819): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21407): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 21438): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 21438): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 21452): invalid character (-) in hexstring +WARNING: issue-335a.pdf (trailer, offset 21837): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21850): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 21892): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21900): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21903): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21906): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21918): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21925): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21925): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21918): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21925): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21937): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21962): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21991): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22000): invalid character (t) in hexstring +WARNING: issue-335a.pdf (trailer, offset 22003): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22028): unexpected > +WARNING: issue-335a.pdf (trailer, offset 22030): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22038): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake3 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake4 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake5 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake6 +WARNING: issue-335a.pdf (trailer, offset 21936): dictionary has duplicated key /Length; last occurrence overrides earlier ones +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake7 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake8 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake9 +WARNING: issue-335a.pdf (trailer, offset 22044): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22052): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22064): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22064): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 21937): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21962): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21991): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22000): invalid character (t) in hexstring +WARNING: issue-335a.pdf (trailer, offset 22003): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22028): unexpected > +WARNING: issue-335a.pdf (trailer, offset 22030): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22038): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake3 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake4 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake5 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake6 +WARNING: issue-335a.pdf (trailer, offset 21936): dictionary has duplicated key /Length; last occurrence overrides earlier ones +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake7 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake8 +WARNING: issue-335a.pdf (trailer, offset 21936): expected dictionary key but found non-name object; inserting key /QPDFFake9 +WARNING: issue-335a.pdf (trailer, offset 21932): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 22052): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22052): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 22000): invalid character (t) in hexstring +WARNING: issue-335a.pdf (trailer, offset 22088): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22087): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22083): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 22136): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22136): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 22178): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22190): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22202): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22218): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22201): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22201): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 22230): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22238): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake3 +WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake4 +WARNING: issue-335a.pdf (trailer, offset 22177): expected dictionary key but found non-name object; inserting key /QPDFFake5 +WARNING: issue-335a.pdf (trailer, offset 22276): stream keyword followed by carriage return only +WARNING: issue-335a.pdf (trailer, offset 22173): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 22276): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22276): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 22202): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22218): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22201): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22201): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 22197): stream dictionary lacks /Length key +WARNING: issue-335a.pdf (trailer, offset 22238): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22238): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 22327): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22336): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22338): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22355): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22360): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake3 +WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake4 +WARNING: issue-335a.pdf (trailer, offset 22326): expected dictionary key but found non-name object; inserting key /QPDFFake5 +WARNING: issue-335a.pdf (trailer, offset 22322): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 22373): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22373): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 22437): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22436): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22432): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 22484): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22484): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 22650): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22656): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22675): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22687): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22690): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22702): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22701): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22740): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22748): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22761): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22791): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22794): unexpected > +WARNING: issue-335a.pdf (trailer, offset 22796): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22804): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake3 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake4 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake5 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake6 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake7 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake8 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake9 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake10 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake11 +WARNING: issue-335a.pdf (trailer, offset 22810): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22817): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22817): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 22687): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22690): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22702): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22701): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22740): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22748): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22761): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22791): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22794): unexpected > +WARNING: issue-335a.pdf (trailer, offset 22796): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22804): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake3 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake4 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake5 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake6 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake7 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake8 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake9 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake10 +WARNING: issue-335a.pdf (trailer, offset 22686): expected dictionary key but found non-name object; inserting key /QPDFFake11 +WARNING: issue-335a.pdf (trailer, offset 22817): stream keyword followed by carriage return only +WARNING: issue-335a.pdf (trailer, offset 22682): stream dictionary lacks /Length key +WARNING: issue-335a.pdf (trailer, offset 22817): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22817): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 22702): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22701): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22697): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (trailer, offset 22748): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22748): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 22845): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22869): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 22844): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (trailer, offset 22844): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (trailer, offset 22844): expected dictionary key but found non-name object; inserting key /QPDFFake3 +WARNING: issue-335a.pdf (trailer, offset 22898): expected endstream +WARNING: issue-335a.pdf (trailer, offset 22882): attempting to recover stream length +WARNING: issue-335a.pdf (trailer, offset 22882): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (trailer, offset 23098): invalid character (t) in hexstring +WARNING: issue-335a.pdf (trailer, offset 23101): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23108): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23130): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23147): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23155): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23155): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 23108): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23130): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23147): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23155): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23196): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23324): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (trailer, offset 23324): too many errors; giving up on reading object +WARNING: issue-335a.pdf (trailer, offset 23411): dictionary ended prematurely; using null as value for last key +WARNING: issue-335a.pdf (object 5 0, offset 23451): invalid character (ÿ) in hexstring +WARNING: issue-335a.pdf (object 5 0, offset 23458): unknown token while reading object; treating as string +WARNING: issue-335a.pdf (object 5 0, offset 23444): expected dictionary key but found non-name object; inserting key /QPDFFake1 +WARNING: issue-335a.pdf (object 5 0, offset 23444): expected dictionary key but found non-name object; inserting key /QPDFFake2 +WARNING: issue-335a.pdf (object 5 0, offset 23440): /Length key in stream dictionary is not an integer +WARNING: issue-335a.pdf (object 5 0, offset 23485): attempting to recover stream length +WARNING: issue-335a.pdf (object 5 0, offset 23485): unable to recover stream data; treating stream as empty +WARNING: issue-335a.pdf (object 5 0, offset 24974): expected endobj +WARNING: issue-335a.pdf (object 5 0, offset 24974): EOF after endobj +issue-335a.pdf (offset 24974): unable to find /Root dictionary