diff --git a/qpdf/qtest/object-stream.test b/qpdf/qtest/object-stream.test index bed3fefa..891f74aa 100644 --- a/qpdf/qtest/object-stream.test +++ b/qpdf/qtest/object-stream.test @@ -16,7 +16,7 @@ cleanup(); my $td = new TestDriver('object-stream'); -my $n_tests = 9 + (36 * 4) + (12 * 2); +my $n_tests = 10 + (36 * 4) + (12 * 2); my $n_compare_pdfs = 36; for (my $n = 16; $n <= 19; ++$n) @@ -117,6 +117,14 @@ $td->runtest("check file", {$td->FILE => "a.pdf"}, {$td->FILE => "object-stream-self-ref.out.pdf"}); +# The file no-space-compressed-object.pdf contains an object stream containing two +# integer objects that are not separated by any white space. The test case exercises +# that all objects in the stream have the correct value. +$td->runtest("adjacent compressed objects", + {$td->COMMAND => "test_driver 99 no-space-compressed-object.pdf"}, + {$td->FILE => "no-space-compressed-object.out", + $td->EXIT_STATUS => 0}, + $td->EXPECT_FAILURE); cleanup(); $td->report(calc_ntests($n_tests, $n_compare_pdfs)); diff --git a/qpdf/qtest/qpdf/no-space-compressed-object.out b/qpdf/qtest/qpdf/no-space-compressed-object.out new file mode 100644 index 00000000..a557db56 --- /dev/null +++ b/qpdf/qtest/qpdf/no-space-compressed-object.out @@ -0,0 +1,5 @@ +1234 +5678 +(orig-3) +(orig-4) +test 99 done diff --git a/qpdf/qtest/qpdf/no-space-compressed-object.pdf b/qpdf/qtest/qpdf/no-space-compressed-object.pdf new file mode 100644 index 00000000..098809f6 Binary files /dev/null and b/qpdf/qtest/qpdf/no-space-compressed-object.pdf differ diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc index ef388259..52f606b8 100644 --- a/qpdf/test_driver.cc +++ b/qpdf/test_driver.cc @@ -3453,6 +3453,16 @@ test_98(QPDF& pdf, char const* arg2) "}"); } +static void +test_99(QPDF& pdf, char const* arg2) +{ + // Designed for no-space-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; + } +} + void runtest(int n, char const* filename1, char const* arg2) { @@ -3554,7 +3564,7 @@ runtest(int n, char const* filename1, char const* arg2) {78, test_78}, {79, test_79}, {80, test_80}, {81, test_81}, {82, test_82}, {83, test_83}, {84, test_84}, {85, test_85}, {86, test_86}, {87, test_87}, {88, test_88}, {89, test_89}, {90, test_90}, {91, test_91}, {92, test_92}, {93, test_93}, {94, test_94}, {95, test_95}, - {96, test_96}, {97, test_97}, {98, test_98}}; + {96, test_96}, {97, test_97}, {98, test_98}, {99, test_99}}; auto fn = test_functions.find(n); if (fn == test_functions.end()) {