Commit 10fda01b07a29bb2e1dec9a51bb6197bc7aa72bf
1 parent
e4073ee8
In QPDFTokenizer::readToken move call to getToken out of loop
Showing
1 changed file
with
17 additions
and
17 deletions
libqpdf/QPDFTokenizer.cc
| ... | ... | @@ -975,25 +975,21 @@ QPDFTokenizer::readToken( |
| 975 | 975 | size_t max_len) |
| 976 | 976 | { |
| 977 | 977 | qpdf_offset_t offset = input->tell(); |
| 978 | - Token token; | |
| 979 | - bool unread_char; | |
| 980 | - char char_to_unread; | |
| 981 | - bool presented_eof = false; | |
| 982 | - while (!getToken(token, unread_char, char_to_unread)) { | |
| 978 | + | |
| 979 | + while (this->state != st_token_ready) { | |
| 983 | 980 | char ch; |
| 984 | 981 | if (input->read(&ch, 1) == 0) { |
| 985 | - if (!presented_eof) { | |
| 986 | - presentEOF(); | |
| 987 | - presented_eof = true; | |
| 988 | - if ((this->type == tt_eof) && (!this->allow_eof)) { | |
| 989 | - // Nothing in the qpdf library calls readToken | |
| 990 | - // without allowEOF anymore, so this case is not | |
| 991 | - // exercised. | |
| 992 | - this->type = tt_bad; | |
| 993 | - this->error_message = "unexpected EOF"; | |
| 994 | - offset = input->getLastOffset(); | |
| 995 | - } | |
| 996 | - } else { | |
| 982 | + presentEOF(); | |
| 983 | + | |
| 984 | + if ((this->type == tt_eof) && (!this->allow_eof)) { | |
| 985 | + // Nothing in the qpdf library calls readToken | |
| 986 | + // without allowEOF anymore, so this case is not | |
| 987 | + // exercised. | |
| 988 | + this->type = tt_bad; | |
| 989 | + this->error_message = "unexpected EOF"; | |
| 990 | + offset = input->getLastOffset(); | |
| 991 | + } | |
| 992 | + if (this->state != st_token_ready) { | |
| 997 | 993 | throw std::logic_error( |
| 998 | 994 | "getToken returned false after presenting EOF"); |
| 999 | 995 | } |
| ... | ... | @@ -1014,6 +1010,10 @@ QPDFTokenizer::readToken( |
| 1014 | 1010 | } |
| 1015 | 1011 | } |
| 1016 | 1012 | |
| 1013 | + Token token; | |
| 1014 | + bool unread_char; | |
| 1015 | + char char_to_unread; | |
| 1016 | + getToken(token, unread_char, char_to_unread); | |
| 1017 | 1017 | if (unread_char) { |
| 1018 | 1018 | input->unreadCh(char_to_unread); |
| 1019 | 1019 | } | ... | ... |