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:
parent
a4fd4b91c6
commit
428d96dfe1
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
107
libqpdf/QPDF.cc
107
libqpdf/QPDF.cc
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -1 +1,2 @@
|
|||||||
bad1.pdf: not a PDF file
|
WARNING: bad1.pdf: can't find PDF header
|
||||||
|
bad1.pdf: can't find startxref
|
||||||
|
@ -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 >>
|
||||||
|
@ -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
|
||||||
|
@ -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 () >>
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user