summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-11-25 21:15:46 +0100
committerJay Berkenbilt <ejb@ql.org>2022-11-25 21:16:16 +0100
commit19a8d3fea22ebaf68ae65ac871b20eb7e0e62bc7 (patch)
tree0ea093fb8454739ae5b7ffc9ca0043131e3f3846
parent32251497c1c7185380dd7f7836613bfe024285b8 (diff)
downloadqpdf-19a8d3fea22ebaf68ae65ac871b20eb7e0e62bc7.tar.zst
Add test case of dangling ref not found until xref reconstruction
-rw-r--r--qpdf/qtest/dangling-refs.test2
-rw-r--r--qpdf/qtest/qpdf/dangling-bad-xref-dangling-out.pdfbin0 -> 1145 bytes
-rw-r--r--qpdf/qtest/qpdf/dangling-bad-xref-dangling.out19
-rw-r--r--qpdf/qtest/qpdf/dangling-bad-xref.pdf110
4 files changed, 130 insertions, 1 deletions
diff --git a/qpdf/qtest/dangling-refs.test b/qpdf/qtest/dangling-refs.test
index bea5f6ae..c63d5acd 100644
--- a/qpdf/qtest/dangling-refs.test
+++ b/qpdf/qtest/dangling-refs.test
@@ -14,7 +14,7 @@ cleanup();
my $td = new TestDriver('dangling-refs');
-my @dangling = (qw(minimal dangling-refs));
+my @dangling = (qw(minimal dangling-refs dangling-bad-xref));
my $n_tests = 2 * scalar(@dangling);
foreach my $f (@dangling)
diff --git a/qpdf/qtest/qpdf/dangling-bad-xref-dangling-out.pdf b/qpdf/qtest/qpdf/dangling-bad-xref-dangling-out.pdf
new file mode 100644
index 00000000..db2f38d1
--- /dev/null
+++ b/qpdf/qtest/qpdf/dangling-bad-xref-dangling-out.pdf
Binary files differ
diff --git a/qpdf/qtest/qpdf/dangling-bad-xref-dangling.out b/qpdf/qtest/qpdf/dangling-bad-xref-dangling.out
new file mode 100644
index 00000000..05221c72
--- /dev/null
+++ b/qpdf/qtest/qpdf/dangling-bad-xref-dangling.out
@@ -0,0 +1,19 @@
+WARNING: dangling-bad-xref.pdf: file is damaged
+WARNING: dangling-bad-xref.pdf (object 7 0, offset 10000): expected n n obj
+WARNING: dangling-bad-xref.pdf: Attempting to reconstruct cross-reference table
+new object: 13 0 R
+all objects
+1 0 R
+2 0 R
+3 0 R
+4 0 R
+5 0 R
+6 0 R
+7 0 R
+8 0 R
+9 0 R
+10 0 R
+11 0 R
+12 0 R
+13 0 R
+test 53 done
diff --git a/qpdf/qtest/qpdf/dangling-bad-xref.pdf b/qpdf/qtest/qpdf/dangling-bad-xref.pdf
new file mode 100644
index 00000000..797cf4fa
--- /dev/null
+++ b/qpdf/qtest/qpdf/dangling-bad-xref.pdf
@@ -0,0 +1,110 @@
+%PDF-1.3
+%¿÷¢þ
+%QDF-1.0
+
+1 0 obj
+<<
+ /Pages 2 0 R
+ /Type /Catalog
+ /Dangling 8 0 R
+ /AlsoDangling [
+ 9 0 R
+ <<
+ /yes 2 0 R
+ /no 10 0 R
+ /nope 8 0 R
+ >>
+ ]
+>>
+endobj
+
+2 0 obj
+<<
+ /Count 1
+ /Kids [
+ 3 0 R
+ ]
+ /Type /Pages
+>>
+endobj
+
+%% Page 1
+3 0 obj
+<<
+ /Contents 4 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 2 0 R
+ /Resources <<
+ /Font <<
+ /F1 6 0 R
+ >>
+ /ProcSet 7 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Contents for page 1
+4 0 obj
+<<
+ /Length 5 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Potato) Tj
+ET
+endstream
+endobj
+
+5 0 obj
+44
+endobj
+
+6 0 obj
+<<
+ /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+ /Name /F1
+ /Subtype /Type1
+ /Type /Font
+>>
+endobj
+
+7 0 obj
+[
+ /PDF
+ /Text
+]
+endobj
+
+11 0 obj
+[
+ 12 0 R
+]
+endobj
+
+xref
+0 8
+0000000000 65535 f
+0000000025 00000 n
+0000000195 00000 n
+0000000277 00000 n
+0000000492 00000 n
+0000000591 00000 n
+0000000610 00000 n
+0000010000 00000 n
+trailer <<
+ /Root 1 0 R
+ /Size 8
+ /ID [<7141a6cf32de469328cf0f51982b5f89><7141a6cf32de469328cf0f51982b5f89>]
+>>
+startxref
+793
+%%EOF