diff options
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qtest/qpdf.test | 6 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/jpeg-qstream.pdf | bin | 0 -> 1156 bytes | |||
-rw-r--r-- | qpdf/qtest/qpdf/test68.out | 4 | ||||
-rw-r--r-- | qpdf/test_driver.cc | 29 |
4 files changed, 38 insertions, 1 deletions
diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test index 788ef2dc..d7986c21 100644 --- a/qpdf/qtest/qpdf.test +++ b/qpdf/qtest/qpdf.test @@ -954,12 +954,16 @@ foreach (my $i = 1; $i <= 3; ++$i) show_ntests(); # ---------- $td->notify("--- Stream data ---"); -$n_tests += 1; +$n_tests += 2; $td->runtest("get stream data", {$td->COMMAND => "test_driver 11 stream-data.pdf"}, {$td->FILE => "test11.out", $td->EXIT_STATUS => 0}, $td->NORMALIZE_NEWLINES); +$td->runtest("get stream data fails on jpeg", + {$td->COMMAND => "test_driver 68 jpeg-qstream.pdf"}, + {$td->FILE => "test68.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); show_ntests(); # ---------- diff --git a/qpdf/qtest/qpdf/jpeg-qstream.pdf b/qpdf/qtest/qpdf/jpeg-qstream.pdf Binary files differnew file mode 100644 index 00000000..8fce760d --- /dev/null +++ b/qpdf/qtest/qpdf/jpeg-qstream.pdf diff --git a/qpdf/qtest/qpdf/test68.out b/qpdf/qtest/qpdf/test68.out new file mode 100644 index 00000000..71647755 --- /dev/null +++ b/qpdf/qtest/qpdf/test68.out @@ -0,0 +1,4 @@ +get unfilterable stream: jpeg-qstream.pdf (offset 284): getStreamData called on unfilterable stream +filtered stream data okay +raw stream data okay +test 68 done diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc index eba0903b..74aa7c26 100644 --- a/qpdf/test_driver.cc +++ b/qpdf/test_driver.cc @@ -2168,6 +2168,35 @@ void runtest(int n, char const* filename1, char const* arg2) w.setStaticID(true); w.write(); } + else if (n == 68) + { + QPDFObjectHandle root = pdf.getRoot(); + QPDFObjectHandle qstream = root.getKey("/QStream"); + try + { + qstream.getStreamData(); + std::cout << "oops -- didn't throw" << std::endl; + } + catch (std::exception& e) + { + std::cout << "get unfilterable stream: " << e.what() + << std::endl; + } + PointerHolder<Buffer> b1 = qstream.getStreamData(qpdf_dl_all); + if ((b1->getSize() > 10) && + (memcmp(b1->getBuffer(), + "wwwwwwwww", 9) == 0)) + { + std::cout << "filtered stream data okay" << std::endl; + } + PointerHolder<Buffer> b2 = qstream.getRawStreamData(); + if ((b2->getSize() > 10) && + (memcmp(b2->getBuffer(), + "\xff\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46", 10) == 0)) + { + std::cout << "raw stream data okay" << std::endl; + } + } else { throw std::runtime_error(std::string("invalid test ") + |