aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2010-08-05 22:20:52 +0200
committerJay Berkenbilt <ejb@ql.org>2010-08-05 22:20:52 +0200
commit6f2bd7eb3a64ae6ffbdf9ae256d822056ddcb7b0 (patch)
treeb2853762f4a564e1110ddf37f4821ea02d40a367 /qpdf
parent11df7809af7131af139be2e76f2db87128700939 (diff)
downloadqpdf-6f2bd7eb3a64ae6ffbdf9ae256d822056ddcb7b0.tar.zst
newStream
git-svn-id: svn+q:///qpdf/trunk@991 71b93d88-0707-0410-a8cf-f5a4172ac649
Diffstat (limited to 'qpdf')
-rw-r--r--qpdf/qpdf.testcov3
-rw-r--r--qpdf/qtest/qpdf.test10
-rw-r--r--qpdf/qtest/qpdf/minimal.pdf79
-rw-r--r--qpdf/qtest/qpdf/new-streams.pdf54
-rw-r--r--qpdf/qtest/qpdf/test9.out2
-rw-r--r--qpdf/test_driver.cc29
6 files changed, 175 insertions, 2 deletions
diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov
index c880188e..49b03c42 100644
--- a/qpdf/qpdf.testcov
+++ b/qpdf/qpdf.testcov
@@ -178,3 +178,6 @@ QPDF_Stream pipe original stream data 0
QPDF_Stream pipe replaced stream data 0
QPDF_Stream pipe use stream provider 0
QPDF_Stream provider length mismatch 0
+QPDFObjectHandle newStream 0
+QPDFObjectHandle newStream with data 0
+QPDF_Stream pipe no stream data 0
diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test
index 6768ebd4..dc47af18 100644
--- a/qpdf/qtest/qpdf.test
+++ b/qpdf/qtest/qpdf.test
@@ -77,7 +77,7 @@ flush_tiff_cache();
show_ntests();
# ----------
$td->notify("--- Miscellaneous Tests ---");
-$n_tests += 26;
+$n_tests += 28;
$td->runtest("qpdf version",
{$td->COMMAND => "qpdf --version"},
@@ -104,7 +104,6 @@ $td->runtest("replace stream data",
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "replaced-stream-data.out"});
-
$td->runtest("replace stream data compressed",
{$td->COMMAND => "test_driver 8 qstream.pdf"},
{$td->FILE => "test8.out", $td->EXIT_STATUS => 0},
@@ -112,6 +111,13 @@ $td->runtest("replace stream data compressed",
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "replaced-stream-data-flate.out"});
+$td->runtest("new streams",
+ {$td->COMMAND => "test_driver 9 minimal.pdf"},
+ {$td->FILE => "test9.out", $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+$td->runtest("new stream",
+ {$td->FILE => "a.pdf"},
+ {$td->FILE => "new-streams.pdf"});
# Make sure we ignore decode parameters that we don't understand
$td->runtest("unknown decode parameters",
diff --git a/qpdf/qtest/qpdf/minimal.pdf b/qpdf/qtest/qpdf/minimal.pdf
new file mode 100644
index 00000000..a7e01f91
--- /dev/null
+++ b/qpdf/qtest/qpdf/minimal.pdf
@@ -0,0 +1,79 @@
+%PDF-1.3
+1 0 obj
+<<
+ /Type /Catalog
+ /Pages 2 0 R
+>>
+endobj
+
+2 0 obj
+<<
+ /Type /Pages
+ /Kids [
+ 3 0 R
+ ]
+ /Count 1
+>>
+endobj
+
+3 0 obj
+<<
+ /Type /Page
+ /Parent 2 0 R
+ /MediaBox [0 0 612 792]
+ /Contents 4 0 R
+ /Resources <<
+ /ProcSet 5 0 R
+ /Font <<
+ /F1 6 0 R
+ >>
+ >>
+>>
+endobj
+
+4 0 obj
+<<
+ /Length 44
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Potato) Tj
+ET
+endstream
+endobj
+
+5 0 obj
+[
+ /PDF
+ /Text
+]
+endobj
+
+6 0 obj
+<<
+ /Type /Font
+ /Subtype /Type1
+ /Name /F1
+ /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+>>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000009 00000 n
+0000000063 00000 n
+0000000135 00000 n
+0000000307 00000 n
+0000000403 00000 n
+0000000438 00000 n
+trailer <<
+ /Size 7
+ /Root 1 0 R
+>>
+startxref
+556
+%%EOF
diff --git a/qpdf/qtest/qpdf/new-streams.pdf b/qpdf/qtest/qpdf/new-streams.pdf
new file mode 100644
index 00000000..d3966a33
--- /dev/null
+++ b/qpdf/qtest/qpdf/new-streams.pdf
@@ -0,0 +1,54 @@
+%PDF-1.3
+%¿÷¢þ
+1 0 obj
+<< /Pages 2 0 R /QStream 3 0 R /RStream 4 0 R /Type /Catalog >>
+endobj
+2 0 obj
+<< /Count 1 /Kids [ 5 0 R ] /Type /Pages >>
+endobj
+3 0 obj
+<< /Length 20 >>
+stream
+data for new stream
+endstream
+endobj
+4 0 obj
+<< /Length 22 >>
+stream
+data for other stream
+endstream
+endobj
+5 0 obj
+<< /Contents 6 0 R /MediaBox [ 0 0 612 792 ] /Parent 2 0 R /Resources << /Font << /F1 7 0 R >> /ProcSet 8 0 R >> /Type /Page >>
+endobj
+6 0 obj
+<< /Length 44 >>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Potato) Tj
+ET
+endstream
+endobj
+7 0 obj
+<< /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font >>
+endobj
+8 0 obj
+[ /PDF /Text ]
+endobj
+xref
+0 9
+0000000000 65535 f
+0000000015 00000 n
+0000000094 00000 n
+0000000153 00000 n
+0000000222 00000 n
+0000000293 00000 n
+0000000436 00000 n
+0000000529 00000 n
+0000000636 00000 n
+trailer << /Root 1 0 R /Size 9 /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] >>
+startxref
+666
+%%EOF
diff --git a/qpdf/qtest/qpdf/test9.out b/qpdf/qtest/qpdf/test9.out
new file mode 100644
index 00000000..3489ba0c
--- /dev/null
+++ b/qpdf/qtest/qpdf/test9.out
@@ -0,0 +1,2 @@
+exception: pipeStreamData called for stream with no data
+test 9 done
diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc
index e9739e92..09458227 100644
--- a/qpdf/test_driver.cc
+++ b/qpdf/test_driver.cc
@@ -398,6 +398,35 @@ void runtest(int n, char const* filename)
w.setStreamDataMode(qpdf_s_preserve);
w.write();
}
+ else if (n == 9)
+ {
+ QPDFObjectHandle root = pdf.getRoot();
+ PointerHolder<Buffer> b1 = new Buffer(20);
+ unsigned char* bp = b1.getPointer()->getBuffer();
+ memcpy(bp, (char*)"data for new stream\n", 20); // no null!
+ QPDFObjectHandle qstream = QPDFObjectHandle::newStream(&pdf, b1);
+ QPDFObjectHandle rstream = QPDFObjectHandle::newStream(&pdf);
+ try
+ {
+ rstream.getStreamData();
+ std::cout << "oops -- getStreamData didn't throw" << std::endl;
+ }
+ catch (std::logic_error const& e)
+ {
+ std::cout << "exception: " << e.what() << std::endl;
+ }
+ PointerHolder<Buffer> b2 = new Buffer(22);
+ bp = b2.getPointer()->getBuffer();
+ memcpy(bp, (char*)"data for other stream\n", 22); // no null!
+ rstream.replaceStreamData(
+ b2, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull());
+ root.replaceKey("/QStream", qstream);
+ root.replaceKey("/RStream", rstream);
+ QPDFWriter w(pdf, "a.pdf");
+ w.setStaticID(true);
+ w.setStreamDataMode(qpdf_s_preserve);
+ w.write();
+ }
else
{
throw std::runtime_error(std::string("invalid test ") +