aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-11-19 22:01:54 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2022-11-19 23:03:17 +0100
commite9980efec87a7a678a1a00cfaf8fc60263c54d24 (patch)
treec3b1379065ff9b1af7b9147ea90c516abf8daf62 /qpdf
parentd79a823d66512b5f5db2c0db739d1a867fcd5774 (diff)
downloadqpdf-e9980efec87a7a678a1a00cfaf8fc60263c54d24.tar.zst
Correctly handle reuse of xref stream (fixes #809)
Diffstat (limited to 'qpdf')
-rw-r--r--qpdf/qpdf.testcov1
-rw-r--r--qpdf/qtest/qpdf/reuse-xref-stream-obj9.out1
-rw-r--r--qpdf/qtest/qpdf/reuse-xref-stream-xref.out10
-rw-r--r--qpdf/qtest/qpdf/reuse-xref-stream.pdfbin0 -> 1447 bytes
-rw-r--r--qpdf/qtest/xref-streams.test13
5 files changed, 24 insertions, 1 deletions
diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov
index e89f63a0..f99d3f74 100644
--- a/qpdf/qpdf.testcov
+++ b/qpdf/qpdf.testcov
@@ -678,3 +678,4 @@ QPDF_json bad calledgetallpages 0
QPDF_json bad pushedinheritedpageresources 0
QPDFPageObjectHelper copied fallback 0
QPDFPageObjectHelper used fallback without copying 0
+QPDF skipping cache for known unchecked object 0
diff --git a/qpdf/qtest/qpdf/reuse-xref-stream-obj9.out b/qpdf/qtest/qpdf/reuse-xref-stream-obj9.out
new file mode 100644
index 00000000..b2a0b987
--- /dev/null
+++ b/qpdf/qtest/qpdf/reuse-xref-stream-obj9.out
@@ -0,0 +1 @@
+<< /BaseFont /Times-Italics /Encoding /WinAnsiEncoding /Subtype /Type1 /Type /Font >>
diff --git a/qpdf/qtest/qpdf/reuse-xref-stream-xref.out b/qpdf/qtest/qpdf/reuse-xref-stream-xref.out
new file mode 100644
index 00000000..becc91f3
--- /dev/null
+++ b/qpdf/qtest/qpdf/reuse-xref-stream-xref.out
@@ -0,0 +1,10 @@
+1/0: uncompressed; offset = 25
+2/0: compressed; stream = 1, index = 0
+3/0: compressed; stream = 1, index = 1
+4/0: compressed; stream = 1, index = 2
+5/0: compressed; stream = 1, index = 3
+6/0: uncompressed; offset = 1054
+7/0: uncompressed; offset = 692
+8/0: uncompressed; offset = 791
+9/0: uncompressed; offset = 1087
+10/0: uncompressed; offset = 1196
diff --git a/qpdf/qtest/qpdf/reuse-xref-stream.pdf b/qpdf/qtest/qpdf/reuse-xref-stream.pdf
new file mode 100644
index 00000000..96cb983f
--- /dev/null
+++ b/qpdf/qtest/qpdf/reuse-xref-stream.pdf
Binary files differ
diff --git a/qpdf/qtest/xref-streams.test b/qpdf/qtest/xref-streams.test
index 10a32763..8d8e8bd9 100644
--- a/qpdf/qtest/xref-streams.test
+++ b/qpdf/qtest/xref-streams.test
@@ -14,7 +14,7 @@ cleanup();
my $td = new TestDriver('xref-streams');
-my $n_tests = 3;
+my $n_tests = 5;
# Handle xref stream with more entries than reported (bug 2872265)
$td->runtest("xref with short size",
@@ -32,6 +32,17 @@ $td->runtest("show new xref stream",
{$td->FILE => "xref-with-short-size-new.out",
$td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
+# Handle appended file that reuses the xref stream object number
+$td->runtest("override xref stream - xref",
+ {$td->COMMAND => "qpdf --show-xref reuse-xref-stream.pdf"},
+ {$td->FILE => "reuse-xref-stream-xref.out",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+$td->runtest("override xref stream - object",
+ {$td->COMMAND => "qpdf --show-object=9 reuse-xref-stream.pdf"},
+ {$td->FILE => "reuse-xref-stream-obj9.out",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
cleanup();
$td->report($n_tests);