2
1
mirror of https://github.com/qpdf/qpdf.git synced 2025-01-03 07:12:28 +00:00

Convert many more errors to warnings

This commit is contained in:
Jay Berkenbilt 2017-07-27 22:27:00 -04:00
parent a4fd4b91c6
commit 428d96dfe1
32 changed files with 205 additions and 70 deletions

View File

@ -29,8 +29,8 @@ $td->runtest("no bookmarks",
$td->runtest("bad", $td->runtest("bad",
{$td->COMMAND => "pdf-bookmarks 3.pdf"}, {$td->COMMAND => "pdf-bookmarks 3.pdf"},
{$td->STRING => "pdf-bookmarks processing file 3.pdf: " . {$td->REGEXP => "pdf-bookmarks processing file 3.pdf: " .
"3.pdf: not a PDF file\n", ".*unable to find trailer.*",
$td->EXIT_STATUS => 2}, $td->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES); $td->NORMALIZE_NEWLINES);

View File

@ -16,7 +16,7 @@ $td->runtest("normal",
$td->runtest("error", $td->runtest("error",
{$td->COMMAND => "pdf-npages bad"}, {$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->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES); $td->NORMALIZE_NEWLINES);

View File

@ -205,7 +205,7 @@ QPDF::getWarnings()
void void
QPDF::parse(char const* password) 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)"); PCRE eof_re("(?s:startxref\\s+(\\d+)\\s+%%EOF\\b)");
if (password) if (password)
@ -233,16 +233,17 @@ QPDF::parse(char const* password)
this->file = new OffsetInputSource(this->file, global_offset); this->file = new OffsetInputSource(this->file, global_offset);
} }
this->pdf_version = m1.getMatch(2); this->pdf_version = m1.getMatch(2);
if (atof(this->pdf_version.c_str()) < 1.2)
{
this->tokenizer.allowPoundAnywhereInName();
}
} }
else else
{ {
QTC::TC("qpdf", "QPDF not a pdf file"); QTC::TC("qpdf", "QPDF not a pdf file");
throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), warn(QPDFExc(qpdf_e_damaged_pdf, this->file->getName(),
"", 0, "not a PDF file"); "", 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 // 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) if (this->attempt_recovery)
{ {
// may throw an exception warn(e);
length = recoverStreamLength( length = recoverStreamLength(
input, objid, generation, stream_offset); input, objid, generation, stream_offset);
} }
@ -1288,9 +1289,9 @@ QPDF::recoverStreamLength(PointerHolder<InputSource> input,
if (length == 0) if (length == 0)
{ {
throw QPDFExc(qpdf_e_damaged_pdf, input->getName(), warn(QPDFExc(qpdf_e_damaged_pdf, input->getName(),
this->last_object_description, stream_offset, this->last_object_description, stream_offset,
"unable to recover stream data"); "unable to recover stream data; treating stream as empty"));
} }
QTC::TC("qpdf", "QPDF recovered stream length"); QTC::TC("qpdf", "QPDF recovered stream length");
@ -1309,6 +1310,10 @@ QPDF::readObjectAtOffset(bool try_recovery,
int exp_objid, int exp_generation, int exp_objid, int exp_generation,
int& objid, int& generation) int& objid, int& generation)
{ {
if (! this->attempt_recovery)
{
try_recovery = false;
}
setLastObjectDescription(description, exp_objid, exp_generation); setLastObjectDescription(description, exp_objid, exp_generation);
// Special case: if offset is 0, just return null. Some PDF // 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)))) (! ((objid == exp_objid) && (generation == exp_generation))))
{ {
QTC::TC("qpdf", "QPDF err wrong objid/generation"); QTC::TC("qpdf", "QPDF err wrong objid/generation");
throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), QPDFExc e(qpdf_e_damaged_pdf, this->file->getName(),
this->last_object_description, offset, this->last_object_description, offset,
std::string("expected ") + std::string("expected ") +
QUtil::int_to_string(exp_objid) + " " + QUtil::int_to_string(exp_objid) + " " +
QUtil::int_to_string(exp_generation) + " obj"); 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) catch (QPDFExc& e)
{ {
if ((exp_objid >= 0) && try_recovery && this->attempt_recovery) if ((exp_objid >= 0) && try_recovery)
{ {
// Try again after reconstructing xref table // Try again after reconstructing xref table
reconstruct_xref(e); reconstruct_xref(e);
@ -1496,31 +1512,42 @@ QPDF::resolve(int objid, int generation)
} }
QPDFXRefEntry const& entry = this->xref_table[og]; QPDFXRefEntry const& entry = this->xref_table[og];
switch (entry.getType()) try
{ {
case 1: switch (entry.getType())
{ {
qpdf_offset_t offset = entry.getOffset(); case 1:
// Object stored in cache by readObjectAtOffset {
int aobjid; qpdf_offset_t offset = entry.getOffset();
int ageneration; // Object stored in cache by readObjectAtOffset
QPDFObjectHandle oh = int aobjid;
readObjectAtOffset(true, offset, "", objid, generation, int ageneration;
aobjid, ageneration); QPDFObjectHandle oh =
} readObjectAtOffset(true, offset, "", objid, generation,
break; aobjid, ageneration);
}
break;
case 2: case 2:
resolveObjectsInStream(entry.getObjStreamNumber()); resolveObjectsInStream(entry.getObjStreamNumber());
break; break;
default: default:
throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), "", 0, throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), "", 0,
"object " + "object " +
QUtil::int_to_string(objid) + "/" + QUtil::int_to_string(objid) + "/" +
QUtil::int_to_string(generation) + QUtil::int_to_string(generation) +
" has unexpected xref entry type"); " 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; return this->obj_cache[og].object;

View File

@ -278,3 +278,4 @@ QPDF recursion loop in resolve 0
QPDFObjectHandle treat word as string 0 QPDFObjectHandle treat word as string 0
QPDFObjectHandle found fake 1 QPDFObjectHandle found fake 1
QPDFObjectHandle no val for last key 0 QPDFObjectHandle no val for last key 0
QPDF resolve failure to null 0

View File

@ -220,7 +220,7 @@ $td->runtest("C API: qpdf version",
# Files to reproduce various bugs # Files to reproduce various bugs
foreach my $d ( foreach my $d (
["51", "resolve loop", 2], ["51", "resolve loop", 3],
["99", "object 0", 2], ["99", "object 0", 2],
["99b", "object 0", 2], ["99b", "object 0", 2],
["100", "xref reconstruction loop", 2], ["100", "xref reconstruction loop", 2],
@ -228,7 +228,7 @@ foreach my $d (
["117", "other infinite loop", 2], ["117", "other infinite loop", 2],
["118", "other infinite loop", 2], ["118", "other infinite loop", 2],
["119", "other infinite loop", 3], ["119", "other infinite loop", 3],
["120", "other infinite loop", 2], ["120", "other infinite loop", 3],
) )
{ {
my ($n, $description, $exit_status) = @$d; my ($n, $description, $exit_status) = @$d;
@ -464,7 +464,7 @@ $td->runtest("EOF terminating literal tokens",
$td->NORMALIZE_NEWLINES); $td->NORMALIZE_NEWLINES);
$td->runtest("EOF reading token", $td->runtest("EOF reading token",
{$td->COMMAND => "qpdf --check eof-reading-token.pdf"}, {$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->NORMALIZE_NEWLINES);
$td->runtest("extra header text", $td->runtest("extra header text",
{$td->COMMAND => "test_driver 32 minimal.pdf"}, {$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 # neither Acrobat nor other PDF viewers really care. Tests 12 and 28
# have error conditions that used to be fatal but are now considered # have error conditions that used to be fatal but are now considered
# non-fatal. # non-fatal.
my %badtest_overrides = (6 => 0, 12 => 0, 13 => 0, my %badtest_overrides = ();
14 => 0, 15 => 0, 17 => 0, for(6, 12..15, 17, 22..28, 30..32, 34, 36)
28 => 0, 30 => 0, 31 => 0, 36 => 0); {
$badtest_overrides{$_} = 0;
}
for (my $i = 1; $i <= scalar(@badfiles); ++$i) for (my $i = 1; $i <= scalar(@badfiles); ++$i)
{ {
my $status = $badtest_overrides{$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 # though in some cases it may. Acrobat Reader would not be able to
# recover any of these files any better. # recover any of these files any better.
my %recover_failures = (); my %recover_failures = ();
for (1, 7, 16, 18..21, 24, 29, 35) for (1, 7, 16, 18..21, 29, 35)
{ {
$recover_failures{$_} = 1; $recover_failures{$_} = 1;
} }

View File

@ -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

View File

@ -1 +1,2 @@
bad1.pdf: not a PDF file WARNING: bad1.pdf: can't find PDF header
bad1.pdf: can't find startxref

View File

@ -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 WARNING: bad22.pdf (object 4 0, file position 341): attempting to recover stream length
/QTest is indirect and has type stream (10) /QTest is indirect and has type stream (10)
/QTest is a stream. Dictionary: << /Qength 44 >> /QTest is a stream. Dictionary: << /Qength 44 >>

View File

@ -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

View File

@ -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 WARNING: bad23.pdf (object 4 0, file position 341): attempting to recover stream length
/QTest is indirect and has type stream (10) /QTest is indirect and has type stream (10)
/QTest is a stream. Dictionary: << /Length () >> /QTest is a stream. Dictionary: << /Length () >>

View File

@ -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

View File

@ -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 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,5 +1,25 @@
error: bad1.pdf: not a PDF file warning: bad1.pdf: can't find PDF header
code: 5 code: 5
file: bad1.pdf file: bad1.pdf
pos : 0 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

View File

@ -2,4 +2,4 @@ checking eof-reading-token.pdf
PDF Version: 1.3 PDF Version: 1.3
File is not encrypted File is not encrypted
File is not linearized 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

View File

@ -1,5 +1,6 @@
WARNING: heifer.pdf: file is damaged WARNING: heifer.pdf: file is damaged
WARNING: heifer.pdf (file position 92741): xref not found WARNING: heifer.pdf (file position 92741): xref not found
WARNING: heifer.pdf: Attempting to reconstruct cross-reference table 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 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 qpdf: operation succeeded with warnings; resulting file may have some problems

View File

@ -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 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 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 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 (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): 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 WARNING: issue-100.pdf (trailer, file position 953): dictionary ended prematurely; using null as value for last key

View File

@ -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: 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): 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 (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 (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 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 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 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 /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 /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 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 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 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 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 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

View File

@ -2,5 +2,6 @@ WARNING: issue-117.pdf: file is damaged
WARNING: issue-117.pdf: can't find startxref WARNING: issue-117.pdf: can't find startxref
WARNING: issue-117.pdf: Attempting to reconstruct cross-reference table 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 (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 WARNING: issue-117.pdf (object 2 0, file position 67): attempting to recover stream length
attempt to make a stream into a direct object attempt to make a stream into a direct object

View File

@ -1,2 +1,3 @@
WARNING: issue-118.pdf (file position 732): loop detected resolving object 2 0 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

View File

@ -1,2 +1,3 @@
WARNING: issue-120.pdf (file position 85): loop detected resolving object 3 0 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

View File

@ -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 7 0, file position 553): expected endobj
WARNING: issue-51.pdf (object 1 0, file position 359): 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 (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 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

View File

@ -2,5 +2,6 @@ checking linearization-bounds-1.pdf
PDF Version: 1.3 PDF Version: 1.3
File is not encrypted File is not encrypted
File is linearized 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 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 linearization-bounds-1.pdf (linearization hint table, file position 1183): /S (shared object) offset is out of bounds

View File

@ -2,5 +2,6 @@ checking linearization-bounds-2.pdf
PDF Version: 1.3 PDF Version: 1.3
File is not encrypted File is not encrypted
File is linearized 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 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 linearization-bounds-2.pdf (linearization hint table, file position 1183): /S (shared object) offset is out of bounds

View File

@ -2,5 +2,6 @@ checking linearization-large-vector-alloc.pdf
PDF Version: 1.3 PDF Version: 1.3
File is not encrypted File is not encrypted
File is linearized 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 WARNING: linearization-large-vector-alloc.pdf (linearization hint stream: object 62 0, file position 1183): attempting to recover stream length
overflow reading bit stream overflow reading bit stream