diff --git a/include/qpdf/QPDFTokenizer.hh b/include/qpdf/QPDFTokenizer.hh index b04e4d8..a0e1824 100644 --- a/include/qpdf/QPDFTokenizer.hh +++ b/include/qpdf/QPDFTokenizer.hh @@ -197,7 +197,6 @@ class QPDFTokenizer bool isSpace(char); bool isDelimiter(char); void findEI(std::shared_ptr input); - void handleCharacter(char); enum state_e { st_top, @@ -212,6 +211,8 @@ class QPDFTokenizer st_token_ready }; + void handleCharacter(char); + void inHexstring(char); void reset(); // Lexer state diff --git a/libqpdf/QPDFTokenizer.cc b/libqpdf/QPDFTokenizer.cc index 6c83119..1220e01 100644 --- a/libqpdf/QPDFTokenizer.cc +++ b/libqpdf/QPDFTokenizer.cc @@ -331,7 +331,8 @@ QPDFTokenizer::handleCharacter(char ch) return; } this->state = st_in_hexstring; - break; + inHexstring(ch); + return; case st_gt: if (ch == '>') { @@ -469,13 +470,18 @@ QPDFTokenizer::handleCharacter(char ch) return; case (st_in_hexstring): - break; + inHexstring(ch); + return; default: throw std::logic_error( "INTERNAL ERROR: invalid state while reading token"); } +} +void +QPDFTokenizer::inHexstring(char ch) +{ if (ch == '>') { this->type = tt_string; this->state = st_token_ready;