aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-01-06 15:49:10 +0100
committerJay Berkenbilt <ejb@ql.org>2021-01-06 16:11:34 +0100
commit6fe7b704c7dfb517e4de20fb25536fab1de83d56 (patch)
tree5c2c15a93944ba01dc609197dfad1d7a823eae51 /qpdf
parent2c078337fa77e26554be817ead3cd080f31f6e9b (diff)
downloadqpdf-6fe7b704c7dfb517e4de20fb25536fab1de83d56.tar.zst
Warn rather than segv on access after closing input source (fixes #495)
Diffstat (limited to 'qpdf')
-rw-r--r--qpdf/qtest/qpdf.test8
-rw-r--r--qpdf/qtest/qpdf/test73.out2
-rw-r--r--qpdf/test_driver.cc5
3 files changed, 14 insertions, 1 deletions
diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test
index 83cbacd3..2843adab 100644
--- a/qpdf/qtest/qpdf.test
+++ b/qpdf/qtest/qpdf.test
@@ -1215,7 +1215,13 @@ $td->runtest("check output",
show_ntests();
# ----------
$td->notify("--- Invalid objects ---");
-$n_tests += 2;
+$n_tests += 3;
+
+$td->runtest("closed input source",
+ {$td->COMMAND => "test_driver 73 minimal.pdf"},
+ {$td->FILE => "test73.out",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
$td->runtest("empty object",
{$td->COMMAND => "qpdf -show-object=7,0 empty-object.pdf"},
diff --git a/qpdf/qtest/qpdf/test73.out b/qpdf/qtest/qpdf/test73.out
new file mode 100644
index 00000000..1b7ad0e6
--- /dev/null
+++ b/qpdf/qtest/qpdf/test73.out
@@ -0,0 +1,2 @@
+WARNING: closed input source: object 2/0: error reading object: QPDF operation attempted after closing input source
+test 73 done
diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc
index aef46d87..1be7fbaf 100644
--- a/qpdf/test_driver.cc
+++ b/qpdf/test_driver.cc
@@ -2300,6 +2300,11 @@ void runtest(int n, char const* filename1, char const* arg2)
buf->getSize());
assert(s.find("/bye") != std::string::npos);
}
+ else if (n == 73)
+ {
+ pdf.closeInputSource();
+ pdf.getRoot().getKey("/Pages").unparseResolved();
+ }
else
{
throw std::runtime_error(std::string("invalid test ") +