diff options
author | Jay Berkenbilt <ejb@ql.org> | 2013-02-23 23:41:27 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2013-02-23 23:51:17 +0100 |
commit | 6c7bf114dc0402dfbfaef4586f05dfd398e57e16 (patch) | |
tree | b7cc8bf0e477e3e4fe28f3a20f2f656788e667d8 /qpdf | |
parent | 7e7c93951f7d0af4cd249f9bbbcf3d79ac500a7c (diff) | |
download | qpdf-6c7bf114dc0402dfbfaef4586f05dfd398e57e16.tar.zst |
Bug fix: properly handle overridden compressed objects
When caching objects in an object stream, only cache objects that
still resolve to that stream. See Changelog mod from this commit for
details.
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qpdf.testcov | 1 | ||||
-rw-r--r-- | qpdf/qtest/qpdf.test | 14 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/override-compressed-object.out | 5 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/override-compressed-object.pdf | bin | 0 -> 1817 bytes | |||
-rw-r--r-- | qpdf/test_driver.cc | 9 |
5 files changed, 28 insertions, 1 deletions
diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index b09e966c..31e15495 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -261,3 +261,4 @@ qpdf-c called qpdf_set_r5_encryption_parameters 0 qpdf-c called qpdf_set_r6_encryption_parameters 0 QPDFObjectHandle EOF in inline image 0 QPDFObjectHandle inline image token 0 +QPDF not caching overridden objstm object 0 diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test index f447bd83..8375e5f2 100644 --- a/qpdf/qtest/qpdf.test +++ b/qpdf/qtest/qpdf.test @@ -199,7 +199,7 @@ $td->runtest("remove page we don't have", show_ntests(); # ---------- $td->notify("--- Miscellaneous Tests ---"); -$n_tests += 60; +$n_tests += 61; $td->runtest("qpdf version", {$td->COMMAND => "qpdf --version"}, @@ -484,6 +484,18 @@ $td->runtest("content stream errors", $td->EXIT_STATUS => 2}, $td->NORMALIZE_NEWLINES); +# The file override-compressed-object.pdf contains an object stream +# with four strings in it. The file is then appended. The appended +# section overrides one of the four strings with a string in another +# object stream and another one in an uncompressed object. The other +# two strings are left alone. The test case exercises that all four +# objects have the correct value. +$td->runtest("overridden compressed objects", + {$td->COMMAND => "test_driver 38 override-compressed-object.pdf"}, + {$td->FILE => "override-compressed-object.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + show_ntests(); # ---------- $td->notify("--- Numeric range parsing tests ---"); diff --git a/qpdf/qtest/qpdf/override-compressed-object.out b/qpdf/qtest/qpdf/override-compressed-object.out new file mode 100644 index 00000000..a3fbd51d --- /dev/null +++ b/qpdf/qtest/qpdf/override-compressed-object.out @@ -0,0 +1,5 @@ +(orig-1) +(override-2) +(override-3) +(orig-4) +test 38 done diff --git a/qpdf/qtest/qpdf/override-compressed-object.pdf b/qpdf/qtest/qpdf/override-compressed-object.pdf Binary files differnew file mode 100644 index 00000000..0647b7fe --- /dev/null +++ b/qpdf/qtest/qpdf/override-compressed-object.pdf diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc index 799ea4ba..d6534abf 100644 --- a/qpdf/test_driver.cc +++ b/qpdf/test_driver.cc @@ -1302,6 +1302,15 @@ void runtest(int n, char const* filename1, char const* arg2) QPDFObjectHandle::parseContentStream(contents, &cb); } } + else if (n == 38) + { + // Designed for override-compressed-object.pdf + QPDFObjectHandle qtest = pdf.getRoot().getKey("/QTest"); + for (int i = 0; i < qtest.getArrayNItems(); ++i) + { + std::cout << qtest.getArrayItem(i).unparseResolved() << std::endl; + } + } else { throw std::runtime_error(std::string("invalid test ") + |