diff options
32 files changed, 205 insertions, 70 deletions
diff --git a/examples/qtest/bookmarks.test b/examples/qtest/bookmarks.test index ba8be25f..1a5306d6 100644 --- a/examples/qtest/bookmarks.test +++ b/examples/qtest/bookmarks.test @@ -29,8 +29,8 @@ $td->runtest("no bookmarks", $td->runtest("bad", {$td->COMMAND => "pdf-bookmarks 3.pdf"}, - {$td->STRING => "pdf-bookmarks processing file 3.pdf: " . - "3.pdf: not a PDF file\n", + {$td->REGEXP => "pdf-bookmarks processing file 3.pdf: " . + ".*unable to find trailer.*", $td->EXIT_STATUS => 2}, $td->NORMALIZE_NEWLINES); diff --git a/examples/qtest/npages.test b/examples/qtest/npages.test index b20f254c..191e8d8f 100644 --- a/examples/qtest/npages.test +++ b/examples/qtest/npages.test @@ -16,7 +16,7 @@ $td->runtest("normal", $td->runtest("error", {$td->COMMAND => "pdf-npages bad"}, - {$td->STRING => "pdf-npages: bad: not a PDF file\n", + {$td->REGEXP => "pdf-npages: bad: unable to find trailer.*", $td->EXIT_STATUS => 2}, $td->NORMALIZE_NEWLINES); diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 087013d7..32c8cdf9 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -205,7 +205,7 @@ QPDF::getWarnings() void QPDF::parse(char const* password) { - PCRE header_re("\\A((?s).*?)%PDF-(1.\\d+)\\b"); + PCRE header_re("\\A((?s).*?)%PDF-(\\d+.\\d+)\\b"); PCRE eof_re("(?s:startxref\\s+(\\d+)\\s+%%EOF\\b)"); if (password) @@ -233,16 +233,17 @@ QPDF::parse(char const* password) this->file = new OffsetInputSource(this->file, global_offset); } this->pdf_version = m1.getMatch(2); - if (atof(this->pdf_version.c_str()) < 1.2) - { - this->tokenizer.allowPoundAnywhereInName(); - } } else { QTC::TC("qpdf", "QPDF not a pdf file"); - throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), - "", 0, "not a PDF file"); + warn(QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), + "", 0, "can't find PDF header")); + this->pdf_version = "1.0"; + } + if (atof(this->pdf_version.c_str()) < 1.2) + { + this->tokenizer.allowPoundAnywhereInName(); } // PDF spec says %%EOF must be found within the last 1024 bytes of @@ -1152,7 +1153,7 @@ QPDF::readObject(PointerHolder<InputSource> input, { if (this->attempt_recovery) { - // may throw an exception + warn(e); length = recoverStreamLength( input, objid, generation, stream_offset); } @@ -1288,9 +1289,9 @@ QPDF::recoverStreamLength(PointerHolder<InputSource> input, if (length == 0) { - throw QPDFExc(qpdf_e_damaged_pdf, input->getName(), - this->last_object_description, stream_offset, - "unable to recover stream data"); + warn(QPDFExc(qpdf_e_damaged_pdf, input->getName(), + this->last_object_description, stream_offset, + "unable to recover stream data; treating stream as empty")); } QTC::TC("qpdf", "QPDF recovered stream length"); @@ -1309,6 +1310,10 @@ QPDF::readObjectAtOffset(bool try_recovery, int exp_objid, int exp_generation, int& objid, int& generation) { + if (! this->attempt_recovery) + { + try_recovery = false; + } setLastObjectDescription(description, exp_objid, exp_generation); // Special case: if offset is 0, just return null. Some PDF @@ -1363,16 +1368,27 @@ QPDF::readObjectAtOffset(bool try_recovery, (! ((objid == exp_objid) && (generation == exp_generation)))) { QTC::TC("qpdf", "QPDF err wrong objid/generation"); - throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), - this->last_object_description, offset, - std::string("expected ") + - QUtil::int_to_string(exp_objid) + " " + - QUtil::int_to_string(exp_generation) + " obj"); + QPDFExc e(qpdf_e_damaged_pdf, this->file->getName(), + this->last_object_description, offset, + std::string("expected ") + + QUtil::int_to_string(exp_objid) + " " + + QUtil::int_to_string(exp_generation) + " obj"); + if (try_recovery) + { + // Will be retried below + throw e; + } + else + { + // We can try reading the object anyway even if the ID + // doesn't match. + warn(e); + } } } catch (QPDFExc& e) { - if ((exp_objid >= 0) && try_recovery && this->attempt_recovery) + if ((exp_objid >= 0) && try_recovery) { // Try again after reconstructing xref table reconstruct_xref(e); @@ -1496,31 +1512,42 @@ QPDF::resolve(int objid, int generation) } QPDFXRefEntry const& entry = this->xref_table[og]; - switch (entry.getType()) - { - case 1: - { - qpdf_offset_t offset = entry.getOffset(); - // Object stored in cache by readObjectAtOffset - int aobjid; - int ageneration; - QPDFObjectHandle oh = - readObjectAtOffset(true, offset, "", objid, generation, - aobjid, ageneration); - } - break; + try + { + switch (entry.getType()) + { + case 1: + { + qpdf_offset_t offset = entry.getOffset(); + // Object stored in cache by readObjectAtOffset + int aobjid; + int ageneration; + QPDFObjectHandle oh = + readObjectAtOffset(true, offset, "", objid, generation, + aobjid, ageneration); + } + break; - case 2: - resolveObjectsInStream(entry.getObjStreamNumber()); - break; + case 2: + resolveObjectsInStream(entry.getObjStreamNumber()); + break; - default: - throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), "", 0, - "object " + - QUtil::int_to_string(objid) + "/" + - QUtil::int_to_string(generation) + - " has unexpected xref entry type"); - } + default: + throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), "", 0, + "object " + + QUtil::int_to_string(objid) + "/" + + QUtil::int_to_string(generation) + + " has unexpected xref entry type"); + } + } + catch (QPDFExc& e) + { + QTC::TC("qpdf", "QPDF resolve failure to null"); + warn(e); + QPDFObjectHandle oh = QPDFObjectHandle::newNull(); + this->obj_cache[og] = + ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1); + } } return this->obj_cache[og].object; diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index 35a7ba78..268ecb16 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -278,3 +278,4 @@ QPDF recursion loop in resolve 0 QPDFObjectHandle treat word as string 0 QPDFObjectHandle found fake 1 QPDFObjectHandle no val for last key 0 +QPDF resolve failure to null 0 diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test index 8378e7b3..b80ab9cb 100644 --- a/qpdf/qtest/qpdf.test +++ b/qpdf/qtest/qpdf.test @@ -220,7 +220,7 @@ $td->runtest("C API: qpdf version", # Files to reproduce various bugs foreach my $d ( - ["51", "resolve loop", 2], + ["51", "resolve loop", 3], ["99", "object 0", 2], ["99b", "object 0", 2], ["100", "xref reconstruction loop", 2], @@ -228,7 +228,7 @@ foreach my $d ( ["117", "other infinite loop", 2], ["118", "other infinite loop", 2], ["119", "other infinite loop", 3], - ["120", "other infinite loop", 2], + ["120", "other infinite loop", 3], ) { my ($n, $description, $exit_status) = @$d; @@ -464,7 +464,7 @@ $td->runtest("EOF terminating literal tokens", $td->NORMALIZE_NEWLINES); $td->runtest("EOF reading token", {$td->COMMAND => "qpdf --check eof-reading-token.pdf"}, - {$td->FILE => "eof-reading-token.out", $td->EXIT_STATUS => 2}, + {$td->FILE => "eof-reading-token.out", $td->EXIT_STATUS => 3}, $td->NORMALIZE_NEWLINES); $td->runtest("extra header text", {$td->COMMAND => "test_driver 32 minimal.pdf"}, @@ -794,9 +794,12 @@ $n_tests += @badfiles + 3; # neither Acrobat nor other PDF viewers really care. Tests 12 and 28 # have error conditions that used to be fatal but are now considered # non-fatal. -my %badtest_overrides = (6 => 0, 12 => 0, 13 => 0, - 14 => 0, 15 => 0, 17 => 0, - 28 => 0, 30 => 0, 31 => 0, 36 => 0); +my %badtest_overrides = (); +for(6, 12..15, 17, 22..28, 30..32, 34, 36) +{ + $badtest_overrides{$_} = 0; +} + for (my $i = 1; $i <= scalar(@badfiles); ++$i) { my $status = $badtest_overrides{$i}; @@ -835,7 +838,7 @@ $n_tests += @badfiles + 8; # though in some cases it may. Acrobat Reader would not be able to # recover any of these files any better. my %recover_failures = (); -for (1, 7, 16, 18..21, 24, 29, 35) +for (1, 7, 16, 18..21, 29, 35) { $recover_failures{$_} = 1; } diff --git a/qpdf/qtest/qpdf/bad1-recover.out b/qpdf/qtest/qpdf/bad1-recover.out index f89eeb6d..2e26fad0 100644 --- a/qpdf/qtest/qpdf/bad1-recover.out +++ b/qpdf/qtest/qpdf/bad1-recover.out @@ -1 +1,5 @@ -bad1.pdf: not a PDF file +WARNING: bad1.pdf: can't find PDF header +WARNING: bad1.pdf: file is damaged +WARNING: bad1.pdf: can't find startxref +WARNING: bad1.pdf: Attempting to reconstruct cross-reference table +bad1.pdf: unable to find trailer dictionary while recovering damaged file diff --git a/qpdf/qtest/qpdf/bad1.out b/qpdf/qtest/qpdf/bad1.out index f89eeb6d..6df0932a 100644 --- a/qpdf/qtest/qpdf/bad1.out +++ b/qpdf/qtest/qpdf/bad1.out @@ -1 +1,2 @@ -bad1.pdf: not a PDF file +WARNING: bad1.pdf: can't find PDF header +bad1.pdf: can't find startxref diff --git a/qpdf/qtest/qpdf/bad22-recover.out b/qpdf/qtest/qpdf/bad22-recover.out index 4a44fad9..b2b59fbf 100644 --- a/qpdf/qtest/qpdf/bad22-recover.out +++ b/qpdf/qtest/qpdf/bad22-recover.out @@ -1,3 +1,4 @@ +WARNING: bad22.pdf (object 4 0, file position 314): stream dictionary lacks /Length key WARNING: bad22.pdf (object 4 0, file position 341): attempting to recover stream length /QTest is indirect and has type stream (10) /QTest is a stream. Dictionary: << /Qength 44 >> diff --git a/qpdf/qtest/qpdf/bad22.out b/qpdf/qtest/qpdf/bad22.out index ec6d5f8e..73d081e4 100644 --- a/qpdf/qtest/qpdf/bad22.out +++ b/qpdf/qtest/qpdf/bad22.out @@ -1 +1,7 @@ -bad22.pdf (object 4 0, file position 314): stream dictionary lacks /Length key +WARNING: bad22.pdf (object 4 0, file position 314): stream dictionary lacks /Length key +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad23-recover.out b/qpdf/qtest/qpdf/bad23-recover.out index 729e8d28..348a6601 100644 --- a/qpdf/qtest/qpdf/bad23-recover.out +++ b/qpdf/qtest/qpdf/bad23-recover.out @@ -1,3 +1,4 @@ +WARNING: bad23.pdf (object 4 0, file position 314): /Length key in stream dictionary is not an integer WARNING: bad23.pdf (object 4 0, file position 341): attempting to recover stream length /QTest is indirect and has type stream (10) /QTest is a stream. Dictionary: << /Length () >> diff --git a/qpdf/qtest/qpdf/bad23.out b/qpdf/qtest/qpdf/bad23.out index b4cf25e8..9bc1bdc6 100644 --- a/qpdf/qtest/qpdf/bad23.out +++ b/qpdf/qtest/qpdf/bad23.out @@ -1 +1,7 @@ -bad23.pdf (object 4 0, file position 314): /Length key in stream dictionary is not an integer +WARNING: bad23.pdf (object 4 0, file position 314): /Length key in stream dictionary is not an integer +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad24-recover.out b/qpdf/qtest/qpdf/bad24-recover.out index 0af01e90..d1bbe736 100644 --- a/qpdf/qtest/qpdf/bad24-recover.out +++ b/qpdf/qtest/qpdf/bad24-recover.out @@ -1,2 +1,10 @@ +WARNING: bad24.pdf (object 4 0, file position 385): expected endstream WARNING: bad24.pdf (object 4 0, file position 341): attempting to recover stream length -bad24.pdf (object 4 0, file position 341): unable to recover stream data +WARNING: bad24.pdf (object 4 0, file position 341): unable to recover stream data; treating stream as empty +WARNING: bad24.pdf (object 4 0, file position 778): EOF while reading token +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad24.out b/qpdf/qtest/qpdf/bad24.out index f503214f..0a4dc8e8 100644 --- a/qpdf/qtest/qpdf/bad24.out +++ b/qpdf/qtest/qpdf/bad24.out @@ -1 +1,7 @@ -bad24.pdf (object 4 0, file position 385): expected endstream +WARNING: bad24.pdf (object 4 0, file position 385): expected endstream +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad25.out b/qpdf/qtest/qpdf/bad25.out index f336b343..d6b13e4a 100644 --- a/qpdf/qtest/qpdf/bad25.out +++ b/qpdf/qtest/qpdf/bad25.out @@ -1 +1,7 @@ -bad25.pdf (object 4 0, file position 307): expected n n obj +WARNING: bad25.pdf (object 4 0, file position 307): expected n n obj +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad26.out b/qpdf/qtest/qpdf/bad26.out index 30c3b723..48263e57 100644 --- a/qpdf/qtest/qpdf/bad26.out +++ b/qpdf/qtest/qpdf/bad26.out @@ -1 +1,7 @@ -bad26.pdf (object 4 0, file position 307): expected n n obj +WARNING: bad26.pdf (object 4 0, file position 307): expected n n obj +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad27.out b/qpdf/qtest/qpdf/bad27.out index 2c494e4f..4f38cca9 100644 --- a/qpdf/qtest/qpdf/bad27.out +++ b/qpdf/qtest/qpdf/bad27.out @@ -1 +1,7 @@ -bad27.pdf (object 4 0, file position 307): expected n n obj +WARNING: bad27.pdf (object 4 0, file position 307): expected n n obj +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad32.out b/qpdf/qtest/qpdf/bad32.out index 60727cc9..9b37770f 100644 --- a/qpdf/qtest/qpdf/bad32.out +++ b/qpdf/qtest/qpdf/bad32.out @@ -1 +1,7 @@ -bad32.pdf (object 4 0, file position 307): expected 4 0 obj +WARNING: bad32.pdf (object 4 0, file position 307): expected 4 0 obj +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad34.out b/qpdf/qtest/qpdf/bad34.out index ee65e147..7ba79167 100644 --- a/qpdf/qtest/qpdf/bad34.out +++ b/qpdf/qtest/qpdf/bad34.out @@ -1 +1,7 @@ -bad34.pdf (object 4 0, file position 322): expected n n obj +WARNING: bad34.pdf (object 4 0, file position 322): expected n n obj +/QTest is implicit +/QTest is indirect and has type null (2) +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad35-recover.out b/qpdf/qtest/qpdf/bad35-recover.out index add1666e..db7ff5d9 100644 --- a/qpdf/qtest/qpdf/bad35-recover.out +++ b/qpdf/qtest/qpdf/bad35-recover.out @@ -1 +1,2 @@ -bad35.pdf (object 1 0, file position 521): supposed object stream 1 has wrong type +WARNING: bad35.pdf (object 1 0, file position 521): supposed object stream 1 has wrong type +operation for Dictionary object attempted on object of wrong type diff --git a/qpdf/qtest/qpdf/bad35.out b/qpdf/qtest/qpdf/bad35.out index add1666e..db7ff5d9 100644 --- a/qpdf/qtest/qpdf/bad35.out +++ b/qpdf/qtest/qpdf/bad35.out @@ -1 +1,2 @@ -bad35.pdf (object 1 0, file position 521): supposed object stream 1 has wrong type +WARNING: bad35.pdf (object 1 0, file position 521): supposed object stream 1 has wrong type +operation for Dictionary object attempted on object of wrong type diff --git a/qpdf/qtest/qpdf/c-read-errors.out b/qpdf/qtest/qpdf/c-read-errors.out index 49594331..f5b2f9b5 100644 --- a/qpdf/qtest/qpdf/c-read-errors.out +++ b/qpdf/qtest/qpdf/c-read-errors.out @@ -1,5 +1,25 @@ -error: bad1.pdf: not a PDF file +warning: bad1.pdf: can't find PDF header code: 5 file: bad1.pdf pos : 0 - text: not a PDF file + text: can't find PDF header +warning: bad1.pdf: file is damaged + code: 5 + file: bad1.pdf + pos : 0 + text: file is damaged +warning: bad1.pdf: can't find startxref + code: 5 + file: bad1.pdf + pos : 0 + text: can't find startxref +warning: bad1.pdf: Attempting to reconstruct cross-reference table + code: 5 + file: bad1.pdf + pos : 0 + text: Attempting to reconstruct cross-reference table +error: bad1.pdf: unable to find trailer dictionary while recovering damaged file + code: 5 + file: bad1.pdf + pos : 0 + text: unable to find trailer dictionary while recovering damaged file diff --git a/qpdf/qtest/qpdf/eof-reading-token.out b/qpdf/qtest/qpdf/eof-reading-token.out index 58e5b09d..fefc5160 100644 --- a/qpdf/qtest/qpdf/eof-reading-token.out +++ b/qpdf/qtest/qpdf/eof-reading-token.out @@ -2,4 +2,4 @@ checking eof-reading-token.pdf PDF Version: 1.3 File is not encrypted File is not linearized -object stream 12 (file position 5): EOF while reading token +WARNING: object stream 12 (file position 5): EOF while reading token diff --git a/qpdf/qtest/qpdf/heifer.out b/qpdf/qtest/qpdf/heifer.out index ee550184..867374e6 100644 --- a/qpdf/qtest/qpdf/heifer.out +++ b/qpdf/qtest/qpdf/heifer.out @@ -1,5 +1,6 @@ WARNING: heifer.pdf: file is damaged WARNING: heifer.pdf (file position 92741): xref not found WARNING: heifer.pdf: Attempting to reconstruct cross-reference table +WARNING: heifer.pdf (object 2 0, file position 2165): expected endstream WARNING: heifer.pdf (object 2 0, file position 51): attempting to recover stream length qpdf: operation succeeded with warnings; resulting file may have some problems diff --git a/qpdf/qtest/qpdf/issue-100.out b/qpdf/qtest/qpdf/issue-100.out index 691e2282..5ff2dc52 100644 --- a/qpdf/qtest/qpdf/issue-100.out +++ b/qpdf/qtest/qpdf/issue-100.out @@ -7,6 +7,8 @@ WARNING: issue-100.pdf (file position 289): unknown token while reading object; WARNING: issue-100.pdf (file position 294): unknown token while reading object; treating as string WARNING: issue-100.pdf (file position 297): unknown token while reading object; treating as string WARNING: issue-100.pdf (file position 304): unknown token while reading object; treating as string +WARNING: issue-100.pdf (file position 308): unexpected ) +WARNING: issue-100.pdf (object 5 0, file position 418): /Length key in stream dictionary is not an integer WARNING: issue-100.pdf (object 5 0, file position 489): attempting to recover stream length WARNING: issue-100.pdf (trailer, file position 953): expected dictionary key but found non-name object; inserting key /QPDFFake1 WARNING: issue-100.pdf (trailer, file position 953): dictionary ended prematurely; using null as value for last key diff --git a/qpdf/qtest/qpdf/issue-101.out b/qpdf/qtest/qpdf/issue-101.out index f2dc4715..9e7be113 100644 --- a/qpdf/qtest/qpdf/issue-101.out +++ b/qpdf/qtest/qpdf/issue-101.out @@ -3,15 +3,22 @@ WARNING: issue-101.pdf (file position 3526): xref not found WARNING: issue-101.pdf: Attempting to reconstruct cross-reference table WARNING: issue-101.pdf (file position 1242): expected dictionary key but found non-name object; inserting key /QPDFFake1 WARNING: issue-101.pdf (file position 1242): dictionary ended prematurely; using null as value for last key +WARNING: issue-101.pdf (object 5 0, file position 1438): /Length key in stream dictionary is not an integer WARNING: issue-101.pdf (object 5 0, file position 1509): attempting to recover stream length +WARNING: issue-101.pdf (trailer, file position 2026): /Length key in stream dictionary is not an integer WARNING: issue-101.pdf (trailer, file position 2097): attempting to recover stream length WARNING: issue-101.pdf (trailer, file position 2928): unknown token while reading object; treating as string WARNING: issue-101.pdf (trailer, file position 2930): unknown token while reading object; treating as string WARNING: issue-101.pdf (trailer, file position 2928): expected dictionary key but found non-name object; inserting key /QPDFFake1 WARNING: issue-101.pdf (trailer, file position 2928): expected dictionary key but found non-name object; inserting key /QPDFFake2 WARNING: issue-101.pdf (trailer, file position 2928): expected dictionary key but found non-name object; inserting key /QPDFFake3 +WARNING: issue-101.pdf (trailer, file position 2925): /Length key in stream dictionary is not an integer WARNING: issue-101.pdf (trailer, file position 2996): attempting to recover stream length +WARNING: issue-101.pdf (trailer, file position 3339): /Length key in stream dictionary is not an integer WARNING: issue-101.pdf (trailer, file position 3410): attempting to recover stream length +WARNING: issue-101.pdf (trailer, file position 3560): /Length key in stream dictionary is not an integer WARNING: issue-101.pdf (trailer, file position 3631): attempting to recover stream length +WARNING: issue-101.pdf (trailer, file position 4113): /Length key in stream dictionary is not an integer WARNING: issue-101.pdf (trailer, file position 4184): attempting to recover stream length -issue-101.pdf (trailer, file position 4184): unable to recover stream data +WARNING: issue-101.pdf (trailer, file position 4184): unable to recover stream data; treating stream as empty +issue-101.pdf: unable to find trailer dictionary while recovering damaged file diff --git a/qpdf/qtest/qpdf/issue-117.out b/qpdf/qtest/qpdf/issue-117.out index 46be2597..2d6e5edb 100644 --- a/qpdf/qtest/qpdf/issue-117.out +++ b/qpdf/qtest/qpdf/issue-117.out @@ -2,5 +2,6 @@ WARNING: issue-117.pdf: file is damaged WARNING: issue-117.pdf: can't find startxref WARNING: issue-117.pdf: Attempting to reconstruct cross-reference table WARNING: issue-117.pdf (file position 66): loop detected resolving object 2 0 +WARNING: issue-117.pdf (object 2 0, file position 22): /Length key in stream dictionary is not an integer WARNING: issue-117.pdf (object 2 0, file position 67): attempting to recover stream length attempt to make a stream into a direct object diff --git a/qpdf/qtest/qpdf/issue-118.out b/qpdf/qtest/qpdf/issue-118.out index 52fe67e9..a71c4ba9 100644 --- a/qpdf/qtest/qpdf/issue-118.out +++ b/qpdf/qtest/qpdf/issue-118.out @@ -1,2 +1,3 @@ WARNING: issue-118.pdf (file position 732): loop detected resolving object 2 0 -issue-118.pdf (xref stream: object 8 0, file position 732): supposed object stream 2 is not a stream +WARNING: issue-118.pdf (xref stream: object 8 0, file position 732): supposed object stream 2 is not a stream +operation for Dictionary object attempted on object of wrong type diff --git a/qpdf/qtest/qpdf/issue-120.out b/qpdf/qtest/qpdf/issue-120.out index 02f41135..c087b451 100644 --- a/qpdf/qtest/qpdf/issue-120.out +++ b/qpdf/qtest/qpdf/issue-120.out @@ -1,2 +1,3 @@ WARNING: issue-120.pdf (file position 85): loop detected resolving object 3 0 -issue-120.pdf (object 6 0, file position 85): supposed object stream 3 is not a stream +WARNING: issue-120.pdf (object 6 0, file position 85): supposed object stream 3 is not a stream +qpdf: operation succeeded with warnings; resulting file may have some problems diff --git a/qpdf/qtest/qpdf/issue-51.out b/qpdf/qtest/qpdf/issue-51.out index 7f2192f6..528c2189 100644 --- a/qpdf/qtest/qpdf/issue-51.out +++ b/qpdf/qtest/qpdf/issue-51.out @@ -2,5 +2,8 @@ WARNING: issue-51.pdf: reported number of objects (0) inconsistent with actual n WARNING: issue-51.pdf (object 7 0, file position 553): expected endobj WARNING: issue-51.pdf (object 1 0, file position 359): expected endobj WARNING: issue-51.pdf (file position 70): loop detected resolving object 2 0 +WARNING: issue-51.pdf (object 2 0, file position 26): /Length key in stream dictionary is not an integer WARNING: issue-51.pdf (object 2 0, file position 71): attempting to recover stream length -issue-51.pdf (object 2 0, file position 71): unable to recover stream data +WARNING: issue-51.pdf (object 2 0, file position 71): unable to recover stream data; treating stream as empty +WARNING: issue-51.pdf (object 2 0, file position 977): EOF while reading token +qpdf: operation succeeded with warnings; resulting file may have some problems diff --git a/qpdf/qtest/qpdf/linearization-bounds-1.out b/qpdf/qtest/qpdf/linearization-bounds-1.out index eaeef14c..3ad15197 100644 --- a/qpdf/qtest/qpdf/linearization-bounds-1.out +++ b/qpdf/qtest/qpdf/linearization-bounds-1.out @@ -2,5 +2,6 @@ checking linearization-bounds-1.pdf PDF Version: 1.3 File is not encrypted File is linearized +WARNING: linearization-bounds-1.pdf (linearization hint stream: object 62 0, file position 1001182): EOF while reading token WARNING: linearization-bounds-1.pdf (linearization hint stream: object 62 0, file position 1183): attempting to recover stream length linearization-bounds-1.pdf (linearization hint table, file position 1183): /S (shared object) offset is out of bounds diff --git a/qpdf/qtest/qpdf/linearization-bounds-2.out b/qpdf/qtest/qpdf/linearization-bounds-2.out index bdf7c91b..4649b1da 100644 --- a/qpdf/qtest/qpdf/linearization-bounds-2.out +++ b/qpdf/qtest/qpdf/linearization-bounds-2.out @@ -2,5 +2,6 @@ checking linearization-bounds-2.pdf PDF Version: 1.3 File is not encrypted File is linearized +WARNING: linearization-bounds-2.pdf (linearization hint stream: object 62 0, file position 1282): expected endstream WARNING: linearization-bounds-2.pdf (linearization hint stream: object 62 0, file position 1183): attempting to recover stream length linearization-bounds-2.pdf (linearization hint table, file position 1183): /S (shared object) offset is out of bounds diff --git a/qpdf/qtest/qpdf/linearization-large-vector-alloc.out b/qpdf/qtest/qpdf/linearization-large-vector-alloc.out index 2c807d3c..067bbfa1 100644 --- a/qpdf/qtest/qpdf/linearization-large-vector-alloc.out +++ b/qpdf/qtest/qpdf/linearization-large-vector-alloc.out @@ -2,5 +2,6 @@ checking linearization-large-vector-alloc.pdf PDF Version: 1.3 File is not encrypted File is linearized +WARNING: linearization-large-vector-alloc.pdf (linearization hint stream: object 62 0, file position 1282): expected endstream WARNING: linearization-large-vector-alloc.pdf (linearization hint stream: object 62 0, file position 1183): attempting to recover stream length overflow reading bit stream |