2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-12-22 10:58:58 +00:00

Change trailer recovery to pickup the last rather than first valid trailer

This commit is contained in:
m-holger 2024-05-07 08:50:39 +01:00
parent 065bb582a3
commit 5de67d48fb
7 changed files with 310 additions and 20 deletions

View File

@ -521,6 +521,9 @@ QPDF::reconstruct_xref(QPDFExc& e)
throw e;
}
const bool recover_trailer = !m->trailer.isInitialized();
qpdf_offset_t max_offset{-1};
m->reconstructed_xref = true;
// We may find more objects, which may contain dangling references.
m->fixed_dangling_refs = false;
@ -561,12 +564,13 @@ QPDF::reconstruct_xref(QPDFExc& e)
int gen = QUtil::string_to_int(t2.getValue().c_str());
insertReconstructedXrefEntry(obj, token_start, gen);
}
} else if (!m->trailer.isInitialized() && t1.isWord("trailer")) {
} else if (recover_trailer && t1.isWord("trailer")) {
QPDFObjectHandle t = readTrailer();
if (!t.isDictionary()) {
// Oh well. It was worth a try.
} else {
setTrailer(t);
max_offset = token_start;
m->trailer = t;
}
}
m->file->seek(next_line_start, SEEK_SET);
@ -574,15 +578,15 @@ QPDF::reconstruct_xref(QPDFExc& e)
}
m->deleted_objects.clear();
if (!m->trailer.isInitialized()) {
qpdf_offset_t max_offset{0};
// If there are any xref streams, take the last one to appear.
for (auto const& iter: m->xref_table) {
auto entry = iter.second;
if (entry.getType() != 1) {
if (recover_trailer) {
// If there are any xref streams, take the last one to appear, provided it appears after any
// recovered trailer..
bool found_xref_stream = false;
for (auto const& [og, entry]: m->xref_table) {
if (entry.getType() != 1 || entry.getOffset() <= max_offset) {
continue;
}
auto oh = getObjectByObjGen(iter.first);
auto oh = getObject(og);
try {
if (!oh.isStreamOfType("/XRef")) {
continue;
@ -590,13 +594,14 @@ QPDF::reconstruct_xref(QPDFExc& e)
} catch (std::exception&) {
continue;
}
found_xref_stream = true;
auto offset = entry.getOffset();
if (offset > max_offset) {
max_offset = offset;
setTrailer(oh.getDict());
m->trailer = oh.getDict();
}
}
if (max_offset > 0) {
if (found_xref_stream) {
try {
read_xref(max_offset);
} catch (std::exception&) {
@ -608,10 +613,6 @@ QPDF::reconstruct_xref(QPDFExc& e)
}
if (!m->trailer.isInitialized()) {
// We could check the last encountered object to see if it was an xref stream. If so, we
// could try to get the trailer from there. This may make it possible to recover files with
// bad startxref pointers even when they have object streams.
throw damagedPDF("", 0, "unable to find trailer dictionary while recovering damaged file");
}

View File

@ -102,11 +102,10 @@ $td->runtest("recover file with xref stream",
{$td->COMMAND => "qpdf --static-id --compress-streams=n" .
" recover-xref-stream.pdf a.pdf"},
{$td->FILE => "recover-xref-stream.out", $td->EXIT_STATUS => 3},
$td->EXPECT_FAILURE);
$td->NORMALIZE_NEWLINES);
$td->runtest("check file",
{$td->FILE => "a.pdf"},
{$td->FILE => "recover-xref-stream-recovered.pdf"},
$td->EXPECT_FAILURE);
{$td->FILE => "recover-xref-stream-recovered.pdf"});
cleanup();
$td->report(calc_ntests($n_tests, $n_compare_pdfs));

View File

@ -2,4 +2,6 @@ WARNING: issue-100.pdf: file is damaged
WARNING: issue-100.pdf (offset 736): xref not found
WARNING: issue-100.pdf: Attempting to reconstruct cross-reference table
WARNING: issue-100.pdf (trailer, offset 488): stream keyword found in trailer
WARNING: issue-100.pdf (trailer, offset 953): dictionary ended prematurely; using null as value for last key
WARNING: issue-100.pdf (trailer, offset 953): expected dictionary key but found non-name object; inserting key /QPDFFake1
qpdf: issue-100.pdf: unable to find /Root dictionary

View File

@ -2,4 +2,24 @@ WARNING: issue-101.pdf: file is damaged
WARNING: issue-101.pdf (offset 3526): xref not found
WARNING: issue-101.pdf: Attempting to reconstruct cross-reference table
WARNING: issue-101.pdf (trailer, offset 1508): stream keyword found in trailer
WARNING: issue-101.pdf (trailer, offset 1701): stream keyword found in trailer
WARNING: issue-101.pdf (trailer, offset 2096): stream keyword found in trailer
WARNING: issue-101.pdf (trailer, offset 2683): stream keyword found in trailer
WARNING: issue-101.pdf (trailer, offset 2928): unknown token while reading object; treating as string
WARNING: issue-101.pdf (trailer, offset 2930): unknown token while reading object; treating as string
WARNING: issue-101.pdf (trailer, offset 2928): expected dictionary key but found non-name object; inserting key /QPDFFake1
WARNING: issue-101.pdf (trailer, offset 2928): expected dictionary key but found non-name object; inserting key /QPDFFake2
WARNING: issue-101.pdf (trailer, offset 2928): expected dictionary key but found non-name object; inserting key /QPDFFake3
WARNING: issue-101.pdf (trailer, offset 2995): stream keyword found in trailer
WARNING: issue-101.pdf (trailer, offset 3409): stream keyword found in trailer
WARNING: issue-101.pdf (trailer, offset 3630): stream keyword found in trailer
WARNING: issue-101.pdf (trailer, offset 4183): stream keyword found in trailer
WARNING: issue-101.pdf (object 11 0, offset 591): unknown token while reading object; treating as string
WARNING: issue-101.pdf (object 11 0, offset 625): treating unexpected brace token as null
WARNING: issue-101.pdf (object 11 0, offset 626): unknown token while reading object; treating as string
WARNING: issue-101.pdf (object 11 0, offset 637): unknown token while reading object; treating as string
WARNING: issue-101.pdf (object 11 0, offset 639): unknown token while reading object; treating as string
WARNING: issue-101.pdf (object 11 0, offset 644): unknown token while reading object; treating as string
WARNING: issue-101.pdf (object 11 0, offset 644): too many errors; giving up on reading object
WARNING: issue-101.pdf (object 11 0, offset 647): expected endobj
qpdf: issue-101.pdf: unable to find /Root dictionary

View File

@ -5,4 +5,5 @@ WARNING: issue-141a.pdf (xref stream: object 9 0, offset 47): unable to recover
WARNING: issue-141a.pdf: file is damaged
WARNING: issue-141a.pdf (xref stream, offset 3): Cross-reference stream's /W indicates entry size of 0
WARNING: issue-141a.pdf: Attempting to reconstruct cross-reference table
qpdf: issue-141a.pdf: unable to find trailer dictionary while recovering damaged file
WARNING: issue-141a.pdf: reported number of objects (0) is not one plus the highest object number (9)
qpdf: issue-141a.pdf: unable to find /Root dictionary

View File

@ -1020,4 +1020,272 @@ WARNING: issue-335a.pdf (trailer, offset 20606): too many errors; giving up on r
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 20747): stream keyword found in trailer
WARNING: issue-335a.pdf (trailer, offset 20785): stream keyword found in trailer
WARNING: issue-335a.pdf (trailer, offset 20812): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 20803): dictionary has duplicated key /Length; last occurrence overrides earlier ones
WARNING: issue-335a.pdf (trailer, offset 20803): expected dictionary key but found non-name object; inserting key /QPDFFake1
WARNING: issue-335a.pdf (trailer, offset 20842): stream keyword found in trailer
WARNING: issue-335a.pdf (trailer, offset 20880): stream keyword found in trailer
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 20927): stream keyword found in trailer
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 21055): stream keyword found in trailer
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 21436): stream keyword found in trailer
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 21936): dictionary has duplicated key /Length; last occurrence overrides earlier ones
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): 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 21936): dictionary has duplicated key /Length; last occurrence overrides earlier ones
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): 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 22050): stream keyword found in trailer
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 22134): stream keyword found in trailer
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 22275): stream keyword found in trailer
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 22236): stream keyword found in trailer
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 22371): stream keyword found in trailer
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 22482): stream keyword found in trailer
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 22816): stream keyword found in trailer
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 22746): stream keyword found in trailer
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 22880): stream keyword found in trailer
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 (trailer, offset 23508): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 23513): unexpected )
WARNING: issue-335a.pdf (trailer, offset 23514): unexpected )
WARNING: issue-335a.pdf (trailer, offset 23516): unknown token while reading object; treating as string
WARNING: issue-335a.pdf (trailer, offset 23518): invalid character (R) in hexstring
WARNING: issue-335a.pdf (trailer, offset 23525): unexpected >
WARNING: issue-335a.pdf (trailer, offset 23525): too many errors; giving up on reading object
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): stream dictionary lacks /Length key
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
qpdf: issue-335a.pdf: unable to find /Root dictionary

View File

@ -1,5 +1,4 @@
WARNING: recover-xref-stream.pdf: file is damaged
WARNING: recover-xref-stream.pdf: can't find startxref
WARNING: recover-xref-stream.pdf: Attempting to reconstruct cross-reference table
WARNING: recover-xref-stream.pdf: reported number of objects (14) is not one plus the highest object number (15)
qpdf: operation succeeded with warnings; resulting file may have some problems