Commit dca70f13e77a5b20ba4f438350a67e48baa796d0
Committed by
Jay Berkenbilt
1 parent
e9980efe
Add method QPDFTokenizer::Token::isInteger
Showing
3 changed files
with
13 additions
and
10 deletions
include/qpdf/QPDFTokenizer.hh
| @@ -107,6 +107,11 @@ class QPDFTokenizer | @@ -107,6 +107,11 @@ class QPDFTokenizer | ||
| 107 | (this->type != tt_bad) && (this->type == rhs.type) && | 107 | (this->type != tt_bad) && (this->type == rhs.type) && |
| 108 | (this->value == rhs.value)); | 108 | (this->value == rhs.value)); |
| 109 | } | 109 | } |
| 110 | + bool | ||
| 111 | + isInteger() const | ||
| 112 | + { | ||
| 113 | + return this->type == tt_integer; | ||
| 114 | + } | ||
| 110 | 115 | ||
| 111 | private: | 116 | private: |
| 112 | token_type_e type; | 117 | token_type_e type; |
libqpdf/QPDF.cc
| @@ -461,8 +461,7 @@ QPDF::findStartxref() | @@ -461,8 +461,7 @@ QPDF::findStartxref() | ||
| 461 | { | 461 | { |
| 462 | QPDFTokenizer::Token t = readToken(this->m->file); | 462 | QPDFTokenizer::Token t = readToken(this->m->file); |
| 463 | if (t == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "startxref")) { | 463 | if (t == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "startxref")) { |
| 464 | - t = readToken(this->m->file); | ||
| 465 | - if (t.getType() == QPDFTokenizer::tt_integer) { | 464 | + if (readToken(this->m->file).isInteger()) { |
| 466 | // Position in front of offset token | 465 | // Position in front of offset token |
| 467 | this->m->file->seek(this->m->file->getLastOffset(), SEEK_SET); | 466 | this->m->file->seek(this->m->file->getLastOffset(), SEEK_SET); |
| 468 | return true; | 467 | return true; |
| @@ -612,10 +611,10 @@ QPDF::reconstruct_xref(QPDFExc& e) | @@ -612,10 +611,10 @@ QPDF::reconstruct_xref(QPDFExc& e) | ||
| 612 | if (token_start >= next_line_start) { | 611 | if (token_start >= next_line_start) { |
| 613 | // don't process yet -- wait until we get to the line | 612 | // don't process yet -- wait until we get to the line |
| 614 | // containing this token | 613 | // containing this token |
| 615 | - } else if (t1.getType() == QPDFTokenizer::tt_integer) { | 614 | + } else if (t1.isInteger()) { |
| 616 | QPDFTokenizer::Token t2 = readToken(this->m->file, MAX_LEN); | 615 | QPDFTokenizer::Token t2 = readToken(this->m->file, MAX_LEN); |
| 617 | QPDFTokenizer::Token t3 = readToken(this->m->file, MAX_LEN); | 616 | QPDFTokenizer::Token t3 = readToken(this->m->file, MAX_LEN); |
| 618 | - if ((t2.getType() == QPDFTokenizer::tt_integer) && | 617 | + if ((t2.isInteger()) && |
| 619 | (t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj"))) { | 618 | (t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj"))) { |
| 620 | int obj = QUtil::string_to_int(t1.getValue().c_str()); | 619 | int obj = QUtil::string_to_int(t1.getValue().c_str()); |
| 621 | int gen = QUtil::string_to_int(t2.getValue().c_str()); | 620 | int gen = QUtil::string_to_int(t2.getValue().c_str()); |
| @@ -1682,8 +1681,8 @@ QPDF::readObjectAtOffset( | @@ -1682,8 +1681,8 @@ QPDF::readObjectAtOffset( | ||
| 1682 | QPDFTokenizer::Token tgen = readToken(this->m->file); | 1681 | QPDFTokenizer::Token tgen = readToken(this->m->file); |
| 1683 | QPDFTokenizer::Token tobj = readToken(this->m->file); | 1682 | QPDFTokenizer::Token tobj = readToken(this->m->file); |
| 1684 | 1683 | ||
| 1685 | - bool objidok = (tobjid.getType() == QPDFTokenizer::tt_integer); | ||
| 1686 | - int genok = (tgen.getType() == QPDFTokenizer::tt_integer); | 1684 | + bool objidok = tobjid.isInteger(); |
| 1685 | + int genok = tgen.isInteger(); | ||
| 1687 | int objok = (tobj == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj")); | 1686 | int objok = (tobj == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj")); |
| 1688 | 1687 | ||
| 1689 | QTC::TC("qpdf", "QPDF check objid", objidok ? 1 : 0); | 1688 | QTC::TC("qpdf", "QPDF check objid", objidok ? 1 : 0); |
| @@ -1945,10 +1944,10 @@ QPDF::resolveObjectsInStream(int obj_stream_number) | @@ -1945,10 +1944,10 @@ QPDF::resolveObjectsInStream(int obj_stream_number) | ||
| 1945 | for (int i = 0; i < n; ++i) { | 1944 | for (int i = 0; i < n; ++i) { |
| 1946 | QPDFTokenizer::Token tnum = readToken(input); | 1945 | QPDFTokenizer::Token tnum = readToken(input); |
| 1947 | QPDFTokenizer::Token toffset = readToken(input); | 1946 | QPDFTokenizer::Token toffset = readToken(input); |
| 1948 | - if (!((tnum.getType() == QPDFTokenizer::tt_integer) && | ||
| 1949 | - (toffset.getType() == QPDFTokenizer::tt_integer))) { | 1947 | + if (!(tnum.isInteger() && toffset.isInteger())) { |
| 1950 | throw damagedPDF( | 1948 | throw damagedPDF( |
| 1951 | input, | 1949 | input, |
| 1950 | + this->m->last_object_description, | ||
| 1952 | input->getLastOffset(), | 1951 | input->getLastOffset(), |
| 1953 | "expected integer in object stream header"); | 1952 | "expected integer in object stream header"); |
| 1954 | } | 1953 | } |
libqpdf/QPDF_linearization.cc
| @@ -124,8 +124,7 @@ QPDF::isLinearized() | @@ -124,8 +124,7 @@ QPDF::isLinearized() | ||
| 124 | QPDFTokenizer::Token t2 = readToken(this->m->file); | 124 | QPDFTokenizer::Token t2 = readToken(this->m->file); |
| 125 | QPDFTokenizer::Token t3 = readToken(this->m->file); | 125 | QPDFTokenizer::Token t3 = readToken(this->m->file); |
| 126 | QPDFTokenizer::Token t4 = readToken(this->m->file); | 126 | QPDFTokenizer::Token t4 = readToken(this->m->file); |
| 127 | - if ((t1.getType() == QPDFTokenizer::tt_integer) && | ||
| 128 | - (t2.getType() == QPDFTokenizer::tt_integer) && | 127 | + if (t1.isInteger() && t2.isInteger() && |
| 129 | (t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj")) && | 128 | (t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj")) && |
| 130 | (t4.getType() == QPDFTokenizer::tt_dict_open)) { | 129 | (t4.getType() == QPDFTokenizer::tt_dict_open)) { |
| 131 | lindict_obj = toI(QUtil::string_to_ll(t1.getValue().c_str())); | 130 | lindict_obj = toI(QUtil::string_to_ll(t1.getValue().c_str())); |