Commit bf477fbb9622b85caeafc0783381de7103b281cd
Committed by
Jay Berkenbilt
1 parent
2611f42c
Do double indirect test correctly
Showing
2 changed files
with
8 additions
and
9 deletions
qpdf/qtest/qpdf/parse-object.out
| 1 | 1 | [ /name 16059 3.14159 false << /key true /other [ (string1) (string2) ] >> null ] |
| 2 | 2 | logic error parsing indirect: QPDFObjectHandle::parse called without context on an object with indirect references |
| 3 | 3 | trailing data: parsed object (trailing test): trailing data found parsing object from string |
| 4 | -broken indirect object reference: parsed object: trailing data found parsing object from string | |
| 4 | +WARNING: parsed object (offset 9): unknown token while reading object; treating as string | |
| 5 | 5 | test 31 done | ... | ... |
qpdf/test_driver.cc
| ... | ... | @@ -1245,14 +1245,13 @@ test_31(QPDF& pdf, char const* arg2) |
| 1245 | 1245 | } catch (std::runtime_error const& e) { |
| 1246 | 1246 | std::cout << "trailing data: " << e.what() << std::endl; |
| 1247 | 1247 | } |
| 1248 | - try { | |
| 1249 | - assert(QPDFObjectHandle::parse(&pdf, "5 0 R").isInteger()); | |
| 1250 | - QPDFObjectHandle::parse(&pdf, "5 0 R 0 R"); | |
| 1251 | - std::cout << "oops -- didn't throw" << std::endl; | |
| 1252 | - } catch (std::runtime_error const& e) { | |
| 1253 | - std::cout << "broken indirect object reference: " << e.what() | |
| 1254 | - << std::endl; | |
| 1255 | - } | |
| 1248 | + assert( | |
| 1249 | + QPDFObjectHandle::parse(&pdf, "[5 0 R]").getArrayItem(0).isInteger()); | |
| 1250 | + // Make sure an indirect integer followed by "0 R" is not | |
| 1251 | + // mistakenly parsed as an indirect object. | |
| 1252 | + assert( | |
| 1253 | + QPDFObjectHandle::parse(&pdf, "[5 0 R 0 R /X]").unparse() == | |
| 1254 | + "[ 5 0 R 0 (R) /X ]"); | |
| 1256 | 1255 | assert( |
| 1257 | 1256 | QPDFObjectHandle::parse(&pdf, "[1 0 R]", "indirect test").unparse() == |
| 1258 | 1257 | "[ 1 0 R ]"); | ... | ... |