Commit ef49291682037eebde9de28ae893f6c9361577b4
1 parent
0b3debaf
In QPDF::readObjectAtOffset fail early on 'expect n n obj'
Showing
1 changed file
with
18 additions
and
14 deletions
libqpdf/QPDF.cc
| ... | ... | @@ -1727,24 +1727,28 @@ QPDF::readObjectAtOffset( |
| 1727 | 1727 | } |
| 1728 | 1728 | |
| 1729 | 1729 | m->file->seek(offset, SEEK_SET); |
| 1730 | - | |
| 1731 | - QPDFTokenizer::Token tobjid = readToken(m->file); | |
| 1732 | - QPDFTokenizer::Token tgen = readToken(m->file); | |
| 1733 | - QPDFTokenizer::Token tobj = readToken(m->file); | |
| 1734 | - | |
| 1735 | - bool objidok = tobjid.isInteger(); | |
| 1736 | - bool genok = tgen.isInteger(); | |
| 1737 | - bool objok = tobj.isWord("obj"); | |
| 1738 | - | |
| 1739 | - QTC::TC("qpdf", "QPDF check objid", objidok ? 1 : 0); | |
| 1740 | - QTC::TC("qpdf", "QPDF check generation", genok ? 1 : 0); | |
| 1741 | - QTC::TC("qpdf", "QPDF check obj", objok ? 1 : 0); | |
| 1742 | - | |
| 1743 | 1730 | try { |
| 1744 | - if (!(objidok && genok && objok)) { | |
| 1731 | + QPDFTokenizer::Token tobjid = readToken(m->file); | |
| 1732 | + bool objidok = tobjid.isInteger(); | |
| 1733 | + QTC::TC("qpdf", "QPDF check objid", objidok ? 1 : 0); | |
| 1734 | + if (!objidok) { | |
| 1745 | 1735 | QTC::TC("qpdf", "QPDF expected n n obj"); |
| 1746 | 1736 | throw damagedPDF(offset, "expected n n obj"); |
| 1747 | 1737 | } |
| 1738 | + QPDFTokenizer::Token tgen = readToken(m->file); | |
| 1739 | + bool genok = tgen.isInteger(); | |
| 1740 | + QTC::TC("qpdf", "QPDF check generation", genok ? 1 : 0); | |
| 1741 | + if (!genok) { | |
| 1742 | + throw damagedPDF(offset, "expected n n obj"); | |
| 1743 | + } | |
| 1744 | + QPDFTokenizer::Token tobj = readToken(m->file); | |
| 1745 | + | |
| 1746 | + bool objok = tobj.isWord("obj"); | |
| 1747 | + QTC::TC("qpdf", "QPDF check obj", objok ? 1 : 0); | |
| 1748 | + | |
| 1749 | + if (!objok) { | |
| 1750 | + throw damagedPDF(offset, "expected n n obj"); | |
| 1751 | + } | |
| 1748 | 1752 | int objid = QUtil::string_to_int(tobjid.getValue().c_str()); |
| 1749 | 1753 | int generation = QUtil::string_to_int(tgen.getValue().c_str()); |
| 1750 | 1754 | og = QPDFObjGen(objid, generation); | ... | ... |