Commit 60538f1958e5ef59a9c39a95f15fa62cf5cda8ce
Committed by
Jay Berkenbilt
1 parent
b252e70c
Change QPDFParser::parse to use QPDFTokenizer::nextToken
Showing
1 changed file
with
15 additions
and
16 deletions
libqpdf/QPDFParser.cc
| @@ -81,15 +81,11 @@ QPDFParser::parse(bool& empty, bool content_stream) | @@ -81,15 +81,11 @@ QPDFParser::parse(bool& empty, bool content_stream) | ||
| 81 | object = nullptr; | 81 | object = nullptr; |
| 82 | set_offset = false; | 82 | set_offset = false; |
| 83 | 83 | ||
| 84 | - QPDFTokenizer::Token token = | ||
| 85 | - tokenizer.readToken(input, object_description, true); | ||
| 86 | - std::string const& token_error_message = token.getErrorMessage(); | ||
| 87 | - if (!token_error_message.empty()) { | ||
| 88 | - // Tokens other than tt_bad can still generate warnings. | ||
| 89 | - warn(token_error_message); | 84 | + if (!tokenizer.nextToken(*input, object_description)) { |
| 85 | + warn(tokenizer.getErrorMessage()); | ||
| 90 | } | 86 | } |
| 91 | 87 | ||
| 92 | - switch (token.getType()) { | 88 | + switch (tokenizer.getType()) { |
| 93 | case QPDFTokenizer::tt_eof: | 89 | case QPDFTokenizer::tt_eof: |
| 94 | if (!content_stream) { | 90 | if (!content_stream) { |
| 95 | QTC::TC("qpdf", "QPDFParser eof in parse"); | 91 | QTC::TC("qpdf", "QPDFParser eof in parse"); |
| @@ -146,7 +142,7 @@ QPDFParser::parse(bool& empty, bool content_stream) | @@ -146,7 +142,7 @@ QPDFParser::parse(bool& empty, bool content_stream) | ||
| 146 | } else { | 142 | } else { |
| 147 | state = st_start; | 143 | state = st_start; |
| 148 | state_stack.push_back( | 144 | state_stack.push_back( |
| 149 | - (token.getType() == QPDFTokenizer::tt_array_open) | 145 | + (tokenizer.getType() == QPDFTokenizer::tt_array_open) |
| 150 | ? st_array | 146 | ? st_array |
| 151 | : st_dictionary); | 147 | : st_dictionary); |
| 152 | b_contents = false; | 148 | b_contents = false; |
| @@ -155,7 +151,7 @@ QPDFParser::parse(bool& empty, bool content_stream) | @@ -155,7 +151,7 @@ QPDFParser::parse(bool& empty, bool content_stream) | ||
| 155 | break; | 151 | break; |
| 156 | 152 | ||
| 157 | case QPDFTokenizer::tt_bool: | 153 | case QPDFTokenizer::tt_bool: |
| 158 | - object = QPDF_Bool::create((token.getValue() == "true")); | 154 | + object = QPDF_Bool::create((tokenizer.getValue() == "true")); |
| 159 | break; | 155 | break; |
| 160 | 156 | ||
| 161 | case QPDFTokenizer::tt_null: | 157 | case QPDFTokenizer::tt_null: |
| @@ -164,16 +160,16 @@ QPDFParser::parse(bool& empty, bool content_stream) | @@ -164,16 +160,16 @@ QPDFParser::parse(bool& empty, bool content_stream) | ||
| 164 | 160 | ||
| 165 | case QPDFTokenizer::tt_integer: | 161 | case QPDFTokenizer::tt_integer: |
| 166 | object = QPDF_Integer::create( | 162 | object = QPDF_Integer::create( |
| 167 | - QUtil::string_to_ll(token.getValue().c_str())); | 163 | + QUtil::string_to_ll(std::string(tokenizer.getValue()).c_str())); |
| 168 | break; | 164 | break; |
| 169 | 165 | ||
| 170 | case QPDFTokenizer::tt_real: | 166 | case QPDFTokenizer::tt_real: |
| 171 | - object = QPDF_Real::create(token.getValue()); | 167 | + object = QPDF_Real::create(tokenizer.getValue()); |
| 172 | break; | 168 | break; |
| 173 | 169 | ||
| 174 | case QPDFTokenizer::tt_name: | 170 | case QPDFTokenizer::tt_name: |
| 175 | { | 171 | { |
| 176 | - std::string name = token.getValue(); | 172 | + auto name = tokenizer.getValue(); |
| 177 | object = QPDF_Name::create(name); | 173 | object = QPDF_Name::create(name); |
| 178 | 174 | ||
| 179 | if (name == "/Contents") { | 175 | if (name == "/Contents") { |
| @@ -186,7 +182,7 @@ QPDFParser::parse(bool& empty, bool content_stream) | @@ -186,7 +182,7 @@ QPDFParser::parse(bool& empty, bool content_stream) | ||
| 186 | 182 | ||
| 187 | case QPDFTokenizer::tt_word: | 183 | case QPDFTokenizer::tt_word: |
| 188 | { | 184 | { |
| 189 | - std::string const& value = token.getValue(); | 185 | + auto value = tokenizer.getValue(); |
| 190 | auto size = olist.size(); | 186 | auto size = olist.size(); |
| 191 | if (content_stream) { | 187 | if (content_stream) { |
| 192 | object = QPDF_Operator::create(value); | 188 | object = QPDF_Operator::create(value); |
| @@ -240,16 +236,19 @@ QPDFParser::parse(bool& empty, bool content_stream) | @@ -240,16 +236,19 @@ QPDFParser::parse(bool& empty, bool content_stream) | ||
| 240 | 236 | ||
| 241 | case QPDFTokenizer::tt_string: | 237 | case QPDFTokenizer::tt_string: |
| 242 | { | 238 | { |
| 243 | - std::string val = token.getValue(); | 239 | + auto val = tokenizer.getValue(); |
| 244 | if (decrypter) { | 240 | if (decrypter) { |
| 245 | if (b_contents) { | 241 | if (b_contents) { |
| 246 | frame.contents_string = val; | 242 | frame.contents_string = val; |
| 247 | frame.contents_offset = input->getLastOffset(); | 243 | frame.contents_offset = input->getLastOffset(); |
| 248 | b_contents = false; | 244 | b_contents = false; |
| 249 | } | 245 | } |
| 250 | - decrypter->decryptString(val); | 246 | + std::string s{val}; |
| 247 | + decrypter->decryptString(s); | ||
| 248 | + object = QPDF_String::create(s); | ||
| 249 | + } else { | ||
| 250 | + object = QPDF_String::create(val); | ||
| 251 | } | 251 | } |
| 252 | - object = QPDF_String::create(val); | ||
| 253 | } | 252 | } |
| 254 | 253 | ||
| 255 | break; | 254 | break; |