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