From dca70f13e77a5b20ba4f438350a67e48baa796d0 Mon Sep 17 00:00:00 2001 From: m-holger Date: Thu, 29 Sep 2022 12:52:19 +0100 Subject: [PATCH] Add method QPDFTokenizer::Token::isInteger --- include/qpdf/QPDFTokenizer.hh | 5 +++++ libqpdf/QPDF.cc | 15 +++++++-------- libqpdf/QPDF_linearization.cc | 3 +-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/qpdf/QPDFTokenizer.hh b/include/qpdf/QPDFTokenizer.hh index 4727dac4..3f5e5206 100644 --- a/include/qpdf/QPDFTokenizer.hh +++ b/include/qpdf/QPDFTokenizer.hh @@ -107,6 +107,11 @@ class QPDFTokenizer (this->type != tt_bad) && (this->type == rhs.type) && (this->value == rhs.value)); } + bool + isInteger() const + { + return this->type == tt_integer; + } private: token_type_e type; diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 8e9a52f8..34cefd2f 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -461,8 +461,7 @@ QPDF::findStartxref() { QPDFTokenizer::Token t = readToken(this->m->file); if (t == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "startxref")) { - t = readToken(this->m->file); - if (t.getType() == QPDFTokenizer::tt_integer) { + if (readToken(this->m->file).isInteger()) { // Position in front of offset token this->m->file->seek(this->m->file->getLastOffset(), SEEK_SET); return true; @@ -612,10 +611,10 @@ QPDF::reconstruct_xref(QPDFExc& e) if (token_start >= next_line_start) { // don't process yet -- wait until we get to the line // containing this token - } else if (t1.getType() == QPDFTokenizer::tt_integer) { + } else if (t1.isInteger()) { QPDFTokenizer::Token t2 = readToken(this->m->file, MAX_LEN); QPDFTokenizer::Token t3 = readToken(this->m->file, MAX_LEN); - if ((t2.getType() == QPDFTokenizer::tt_integer) && + if ((t2.isInteger()) && (t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj"))) { int obj = QUtil::string_to_int(t1.getValue().c_str()); int gen = QUtil::string_to_int(t2.getValue().c_str()); @@ -1682,8 +1681,8 @@ QPDF::readObjectAtOffset( QPDFTokenizer::Token tgen = readToken(this->m->file); QPDFTokenizer::Token tobj = readToken(this->m->file); - bool objidok = (tobjid.getType() == QPDFTokenizer::tt_integer); - int genok = (tgen.getType() == QPDFTokenizer::tt_integer); + bool objidok = tobjid.isInteger(); + int genok = tgen.isInteger(); int objok = (tobj == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj")); QTC::TC("qpdf", "QPDF check objid", objidok ? 1 : 0); @@ -1945,10 +1944,10 @@ QPDF::resolveObjectsInStream(int obj_stream_number) for (int i = 0; i < n; ++i) { QPDFTokenizer::Token tnum = readToken(input); QPDFTokenizer::Token toffset = readToken(input); - if (!((tnum.getType() == QPDFTokenizer::tt_integer) && - (toffset.getType() == QPDFTokenizer::tt_integer))) { + if (!(tnum.isInteger() && toffset.isInteger())) { throw damagedPDF( input, + this->m->last_object_description, input->getLastOffset(), "expected integer in object stream header"); } diff --git a/libqpdf/QPDF_linearization.cc b/libqpdf/QPDF_linearization.cc index ac7e3efe..0c3cd185 100644 --- a/libqpdf/QPDF_linearization.cc +++ b/libqpdf/QPDF_linearization.cc @@ -124,8 +124,7 @@ QPDF::isLinearized() QPDFTokenizer::Token t2 = readToken(this->m->file); QPDFTokenizer::Token t3 = readToken(this->m->file); QPDFTokenizer::Token t4 = readToken(this->m->file); - if ((t1.getType() == QPDFTokenizer::tt_integer) && - (t2.getType() == QPDFTokenizer::tt_integer) && + if (t1.isInteger() && t2.isInteger() && (t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj")) && (t4.getType() == QPDFTokenizer::tt_dict_open)) { lindict_obj = toI(QUtil::string_to_ll(t1.getValue().c_str()));