diff options
author | Jay Berkenbilt <ejb@ql.org> | 2019-01-30 20:14:46 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2019-01-31 15:26:37 +0100 |
commit | 31372edce0b60211c7af98340b3afa054f414ca4 (patch) | |
tree | 8c42952c531b1c665a02b20e4c17fd6b25950883 /libqpdf | |
parent | c136356378cb6fb240d0784b1787f77f8ab6aa96 (diff) | |
download | qpdf-31372edce0b60211c7af98340b3afa054f414ca4.tar.zst |
Inline image token value ends with EI, not delimiter
The inline image token erroneously included the delimiter that
followed EI. The ObjectHandle created from it was correct.
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDFObjectHandle.cc | 4 | ||||
-rw-r--r-- | libqpdf/QPDFTokenizer.cc | 7 |
2 files changed, 4 insertions, 7 deletions
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 4e77bbaa..ecaa49bd 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -1571,9 +1571,9 @@ QPDFObjectHandle::parseContentStream_data( else { // Skip back over EI - input->seek(-3, SEEK_CUR); + input->seek(-2, SEEK_CUR); std::string inline_image = t.getRawValue(); - for (int i = 0; i < 4; ++i) + for (int i = 0; i < 3; ++i) { if (inline_image.length() > 0) { diff --git a/libqpdf/QPDFTokenizer.cc b/libqpdf/QPDFTokenizer.cc index e1399d82..c11c8218 100644 --- a/libqpdf/QPDFTokenizer.cc +++ b/libqpdf/QPDFTokenizer.cc @@ -468,6 +468,7 @@ QPDFTokenizer::presentCharacter(char ch) } else if (this->m->state == st_inline_image) { + this->m->val += ch; size_t len = this->m->val.length(); if ((len >= 4) && isDelimiter(this->m->val.at(len-4)) && @@ -475,22 +476,18 @@ QPDFTokenizer::presentCharacter(char ch) (this->m->val.at(len-2) == 'I') && isDelimiter(this->m->val.at(len-1))) { + this->m->val.erase(len - 1); this->m->type = tt_inline_image; this->m->unread_char = true; this->m->char_to_unread = ch; this->m->state = st_token_ready; } - else - { - this->m->val += ch; - } } else { handled = false; } - if (handled) { // okay |