aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2023-01-01 04:30:51 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2023-01-01 13:33:34 +0100
commitbf477fbb9622b85caeafc0783381de7103b281cd (patch)
treef17f044de562452b8e041a3d19b089b90b61261c
parent2611f42c36255e3fa7aecb17aa5689b6d75eed72 (diff)
downloadqpdf-bf477fbb9622b85caeafc0783381de7103b281cd.tar.zst
Do double indirect test correctly
-rw-r--r--qpdf/qtest/qpdf/parse-object.out2
-rw-r--r--qpdf/test_driver.cc15
2 files changed, 8 insertions, 9 deletions
diff --git a/qpdf/qtest/qpdf/parse-object.out b/qpdf/qtest/qpdf/parse-object.out
index 929623cc..2e09f6ad 100644
--- a/qpdf/qtest/qpdf/parse-object.out
+++ b/qpdf/qtest/qpdf/parse-object.out
@@ -1,5 +1,5 @@
[ /name 16059 3.14159 false << /key true /other [ (string1) (string2) ] >> null ]
logic error parsing indirect: QPDFObjectHandle::parse called without context on an object with indirect references
trailing data: parsed object (trailing test): trailing data found parsing object from string
-broken indirect object reference: parsed object: trailing data found parsing object from string
+WARNING: parsed object (offset 9): unknown token while reading object; treating as string
test 31 done
diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc
index 3a907464..5bae8b54 100644
--- a/qpdf/test_driver.cc
+++ b/qpdf/test_driver.cc
@@ -1245,14 +1245,13 @@ test_31(QPDF& pdf, char const* arg2)
} catch (std::runtime_error const& e) {
std::cout << "trailing data: " << e.what() << std::endl;
}
- try {
- assert(QPDFObjectHandle::parse(&pdf, "5 0 R").isInteger());
- QPDFObjectHandle::parse(&pdf, "5 0 R 0 R");
- std::cout << "oops -- didn't throw" << std::endl;
- } catch (std::runtime_error const& e) {
- std::cout << "broken indirect object reference: " << e.what()
- << std::endl;
- }
+ assert(
+ QPDFObjectHandle::parse(&pdf, "[5 0 R]").getArrayItem(0).isInteger());
+ // Make sure an indirect integer followed by "0 R" is not
+ // mistakenly parsed as an indirect object.
+ assert(
+ QPDFObjectHandle::parse(&pdf, "[5 0 R 0 R /X]").unparse() ==
+ "[ 5 0 R 0 (R) /X ]");
assert(
QPDFObjectHandle::parse(&pdf, "[1 0 R]", "indirect test").unparse() ==
"[ 1 0 R ]");