Commit 60538f1958e5ef59a9c39a95f15fa62cf5cda8ce

Authored by m-holger
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;
... ...