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,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;