mirror of https://github.com/qpdf/qpdf.git
Add method QPDFTokenizer::Token::isInteger
This commit is contained in:
parent
e9980efec8
commit
dca70f13e7
|
@ -107,6 +107,11 @@ class QPDFTokenizer
|
||||||
(this->type != tt_bad) && (this->type == rhs.type) &&
|
(this->type != tt_bad) && (this->type == rhs.type) &&
|
||||||
(this->value == rhs.value));
|
(this->value == rhs.value));
|
||||||
}
|
}
|
||||||
|
bool
|
||||||
|
isInteger() const
|
||||||
|
{
|
||||||
|
return this->type == tt_integer;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
token_type_e type;
|
token_type_e type;
|
||||||
|
|
|
@ -461,8 +461,7 @@ QPDF::findStartxref()
|
||||||
{
|
{
|
||||||
QPDFTokenizer::Token t = readToken(this->m->file);
|
QPDFTokenizer::Token t = readToken(this->m->file);
|
||||||
if (t == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "startxref")) {
|
if (t == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "startxref")) {
|
||||||
t = readToken(this->m->file);
|
if (readToken(this->m->file).isInteger()) {
|
||||||
if (t.getType() == QPDFTokenizer::tt_integer) {
|
|
||||||
// Position in front of offset token
|
// Position in front of offset token
|
||||||
this->m->file->seek(this->m->file->getLastOffset(), SEEK_SET);
|
this->m->file->seek(this->m->file->getLastOffset(), SEEK_SET);
|
||||||
return true;
|
return true;
|
||||||
|
@ -612,10 +611,10 @@ QPDF::reconstruct_xref(QPDFExc& e)
|
||||||
if (token_start >= next_line_start) {
|
if (token_start >= next_line_start) {
|
||||||
// don't process yet -- wait until we get to the line
|
// don't process yet -- wait until we get to the line
|
||||||
// containing this token
|
// 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 t2 = readToken(this->m->file, MAX_LEN);
|
||||||
QPDFTokenizer::Token t3 = 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"))) {
|
(t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj"))) {
|
||||||
int obj = QUtil::string_to_int(t1.getValue().c_str());
|
int obj = QUtil::string_to_int(t1.getValue().c_str());
|
||||||
int gen = QUtil::string_to_int(t2.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 tgen = readToken(this->m->file);
|
||||||
QPDFTokenizer::Token tobj = readToken(this->m->file);
|
QPDFTokenizer::Token tobj = readToken(this->m->file);
|
||||||
|
|
||||||
bool objidok = (tobjid.getType() == QPDFTokenizer::tt_integer);
|
bool objidok = tobjid.isInteger();
|
||||||
int genok = (tgen.getType() == QPDFTokenizer::tt_integer);
|
int genok = tgen.isInteger();
|
||||||
int objok = (tobj == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj"));
|
int objok = (tobj == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj"));
|
||||||
|
|
||||||
QTC::TC("qpdf", "QPDF check objid", objidok ? 1 : 0);
|
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) {
|
for (int i = 0; i < n; ++i) {
|
||||||
QPDFTokenizer::Token tnum = readToken(input);
|
QPDFTokenizer::Token tnum = readToken(input);
|
||||||
QPDFTokenizer::Token toffset = readToken(input);
|
QPDFTokenizer::Token toffset = readToken(input);
|
||||||
if (!((tnum.getType() == QPDFTokenizer::tt_integer) &&
|
if (!(tnum.isInteger() && toffset.isInteger())) {
|
||||||
(toffset.getType() == QPDFTokenizer::tt_integer))) {
|
|
||||||
throw damagedPDF(
|
throw damagedPDF(
|
||||||
input,
|
input,
|
||||||
|
this->m->last_object_description,
|
||||||
input->getLastOffset(),
|
input->getLastOffset(),
|
||||||
"expected integer in object stream header");
|
"expected integer in object stream header");
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,8 +124,7 @@ QPDF::isLinearized()
|
||||||
QPDFTokenizer::Token t2 = readToken(this->m->file);
|
QPDFTokenizer::Token t2 = readToken(this->m->file);
|
||||||
QPDFTokenizer::Token t3 = readToken(this->m->file);
|
QPDFTokenizer::Token t3 = readToken(this->m->file);
|
||||||
QPDFTokenizer::Token t4 = readToken(this->m->file);
|
QPDFTokenizer::Token t4 = readToken(this->m->file);
|
||||||
if ((t1.getType() == QPDFTokenizer::tt_integer) &&
|
if (t1.isInteger() && t2.isInteger() &&
|
||||||
(t2.getType() == QPDFTokenizer::tt_integer) &&
|
|
||||||
(t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj")) &&
|
(t3 == QPDFTokenizer::Token(QPDFTokenizer::tt_word, "obj")) &&
|
||||||
(t4.getType() == QPDFTokenizer::tt_dict_open)) {
|
(t4.getType() == QPDFTokenizer::tt_dict_open)) {
|
||||||
lindict_obj = toI(QUtil::string_to_ll(t1.getValue().c_str()));
|
lindict_obj = toI(QUtil::string_to_ll(t1.getValue().c_str()));
|
||||||
|
|
Loading…
Reference in New Issue