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 | 81 | object = nullptr; |
| 82 | 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 | 89 | case QPDFTokenizer::tt_eof: |
| 94 | 90 | if (!content_stream) { |
| 95 | 91 | QTC::TC("qpdf", "QPDFParser eof in parse"); |
| ... | ... | @@ -146,7 +142,7 @@ QPDFParser::parse(bool& empty, bool content_stream) |
| 146 | 142 | } else { |
| 147 | 143 | state = st_start; |
| 148 | 144 | state_stack.push_back( |
| 149 | - (token.getType() == QPDFTokenizer::tt_array_open) | |
| 145 | + (tokenizer.getType() == QPDFTokenizer::tt_array_open) | |
| 150 | 146 | ? st_array |
| 151 | 147 | : st_dictionary); |
| 152 | 148 | b_contents = false; |
| ... | ... | @@ -155,7 +151,7 @@ QPDFParser::parse(bool& empty, bool content_stream) |
| 155 | 151 | break; |
| 156 | 152 | |
| 157 | 153 | case QPDFTokenizer::tt_bool: |
| 158 | - object = QPDF_Bool::create((token.getValue() == "true")); | |
| 154 | + object = QPDF_Bool::create((tokenizer.getValue() == "true")); | |
| 159 | 155 | break; |
| 160 | 156 | |
| 161 | 157 | case QPDFTokenizer::tt_null: |
| ... | ... | @@ -164,16 +160,16 @@ QPDFParser::parse(bool& empty, bool content_stream) |
| 164 | 160 | |
| 165 | 161 | case QPDFTokenizer::tt_integer: |
| 166 | 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 | 164 | break; |
| 169 | 165 | |
| 170 | 166 | case QPDFTokenizer::tt_real: |
| 171 | - object = QPDF_Real::create(token.getValue()); | |
| 167 | + object = QPDF_Real::create(tokenizer.getValue()); | |
| 172 | 168 | break; |
| 173 | 169 | |
| 174 | 170 | case QPDFTokenizer::tt_name: |
| 175 | 171 | { |
| 176 | - std::string name = token.getValue(); | |
| 172 | + auto name = tokenizer.getValue(); | |
| 177 | 173 | object = QPDF_Name::create(name); |
| 178 | 174 | |
| 179 | 175 | if (name == "/Contents") { |
| ... | ... | @@ -186,7 +182,7 @@ QPDFParser::parse(bool& empty, bool content_stream) |
| 186 | 182 | |
| 187 | 183 | case QPDFTokenizer::tt_word: |
| 188 | 184 | { |
| 189 | - std::string const& value = token.getValue(); | |
| 185 | + auto value = tokenizer.getValue(); | |
| 190 | 186 | auto size = olist.size(); |
| 191 | 187 | if (content_stream) { |
| 192 | 188 | object = QPDF_Operator::create(value); |
| ... | ... | @@ -240,16 +236,19 @@ QPDFParser::parse(bool& empty, bool content_stream) |
| 240 | 236 | |
| 241 | 237 | case QPDFTokenizer::tt_string: |
| 242 | 238 | { |
| 243 | - std::string val = token.getValue(); | |
| 239 | + auto val = tokenizer.getValue(); | |
| 244 | 240 | if (decrypter) { |
| 245 | 241 | if (b_contents) { |
| 246 | 242 | frame.contents_string = val; |
| 247 | 243 | frame.contents_offset = input->getLastOffset(); |
| 248 | 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 | 254 | break; | ... | ... |