Commit 0f0502b13ff6a6eb2ee98de6d2835326df75a168

Authored by copilot-swe-agent[bot]
Committed by m-holger
1 parent 843e2b45

Add trailing underscore to QPDFParser member variables

Co-authored-by: m-holger <34626170+m-holger@users.noreply.github.com>
libqpdf/QPDFParser.cc
@@ -185,13 +185,13 @@ QPDFParser::parse_first(bool content_stream) @@ -185,13 +185,13 @@ QPDFParser::parse_first(bool content_stream)
185 // effect of reading the object and changing the file pointer. If you do this, it will cause a 185 // effect of reading the object and changing the file pointer. If you do this, it will cause a
186 // logic error to be thrown from QPDF::inParse(). 186 // logic error to be thrown from QPDF::inParse().
187 187
188 - QPDF::Doc::ParseGuard pg(context);  
189 - start = input.tell();  
190 - if (!tokenizer.nextToken(input, object_description)) {  
191 - warn(tokenizer.getErrorMessage()); 188 + QPDF::Doc::ParseGuard pg(context_);
  189 + start_ = input_.tell();
  190 + if (!tokenizer_.nextToken(input_, object_description_)) {
  191 + warn(tokenizer_.getErrorMessage());
192 } 192 }
193 193
194 - switch (tokenizer.getType()) { 194 + switch (tokenizer_.getType()) {
195 case QPDFTokenizer::tt_eof: 195 case QPDFTokenizer::tt_eof:
196 if (content_stream) { 196 if (content_stream) {
197 // In content stream mode, leave object uninitialized to indicate EOF 197 // In content stream mode, leave object uninitialized to indicate EOF
@@ -219,31 +219,31 @@ QPDFParser::parse_first(bool content_stream) @@ -219,31 +219,31 @@ QPDFParser::parse_first(bool content_stream)
219 219
220 case QPDFTokenizer::tt_array_open: 220 case QPDFTokenizer::tt_array_open:
221 case QPDFTokenizer::tt_dict_open: 221 case QPDFTokenizer::tt_dict_open:
222 - stack.clear();  
223 - stack.emplace_back(  
224 - input,  
225 - (tokenizer.getType() == QPDFTokenizer::tt_array_open) ? st_array : st_dictionary_key);  
226 - frame = &stack.back(); 222 + stack_.clear();
  223 + stack_.emplace_back(
  224 + input_,
  225 + (tokenizer_.getType() == QPDFTokenizer::tt_array_open) ? st_array : st_dictionary_key);
  226 + frame_ = &stack_.back();
227 return parseRemainder(content_stream); 227 return parseRemainder(content_stream);
228 228
229 case QPDFTokenizer::tt_bool: 229 case QPDFTokenizer::tt_bool:
230 - return withDescription<QPDF_Bool>(tokenizer.getValue() == "true"); 230 + return withDescription<QPDF_Bool>(tokenizer_.getValue() == "true");
231 231
232 case QPDFTokenizer::tt_null: 232 case QPDFTokenizer::tt_null:
233 return {QPDFObject::create<QPDF_Null>()}; 233 return {QPDFObject::create<QPDF_Null>()};
234 234
235 case QPDFTokenizer::tt_integer: 235 case QPDFTokenizer::tt_integer:
236 - return withDescription<QPDF_Integer>(QUtil::string_to_ll(tokenizer.getValue().c_str())); 236 + return withDescription<QPDF_Integer>(QUtil::string_to_ll(tokenizer_.getValue().c_str()));
237 237
238 case QPDFTokenizer::tt_real: 238 case QPDFTokenizer::tt_real:
239 - return withDescription<QPDF_Real>(tokenizer.getValue()); 239 + return withDescription<QPDF_Real>(tokenizer_.getValue());
240 240
241 case QPDFTokenizer::tt_name: 241 case QPDFTokenizer::tt_name:
242 - return withDescription<QPDF_Name>(tokenizer.getValue()); 242 + return withDescription<QPDF_Name>(tokenizer_.getValue());
243 243
244 case QPDFTokenizer::tt_word: 244 case QPDFTokenizer::tt_word:
245 { 245 {
246 - auto const& value = tokenizer.getValue(); 246 + auto const& value = tokenizer_.getValue();
247 if (content_stream) { 247 if (content_stream) {
248 return withDescription<QPDF_Operator>(value); 248 return withDescription<QPDF_Operator>(value);
249 } else if (value == "endobj") { 249 } else if (value == "endobj") {
@@ -252,7 +252,7 @@ QPDFParser::parse_first(bool content_stream) @@ -252,7 +252,7 @@ QPDFParser::parse_first(bool content_stream)
252 // Adobe Reader appears to ignore them. Treat this as a null and do not move the 252 // Adobe Reader appears to ignore them. Treat this as a null and do not move the
253 // input source's offset. 253 // input source's offset.
254 empty_ = true; 254 empty_ = true;
255 - input.seek(input.getLastOffset(), SEEK_SET); 255 + input_.seek(input_.getLastOffset(), SEEK_SET);
256 if (!content_stream) { 256 if (!content_stream) {
257 warn("empty object treated as null"); 257 warn("empty object treated as null");
258 } 258 }
@@ -264,12 +264,12 @@ QPDFParser::parse_first(bool content_stream) @@ -264,12 +264,12 @@ QPDFParser::parse_first(bool content_stream)
264 } 264 }
265 265
266 case QPDFTokenizer::tt_string: 266 case QPDFTokenizer::tt_string:
267 - if (decrypter) {  
268 - std::string s{tokenizer.getValue()};  
269 - decrypter->decryptString(s); 267 + if (decrypter_) {
  268 + std::string s{tokenizer_.getValue()};
  269 + decrypter_->decryptString(s);
270 return withDescription<QPDF_String>(s); 270 return withDescription<QPDF_String>(s);
271 } else { 271 } else {
272 - return withDescription<QPDF_String>(tokenizer.getValue()); 272 + return withDescription<QPDF_String>(tokenizer_.getValue());
273 } 273 }
274 274
275 default: 275 default:
@@ -286,58 +286,58 @@ QPDFParser::parseRemainder(bool content_stream) @@ -286,58 +286,58 @@ QPDFParser::parseRemainder(bool content_stream)
286 // effect of reading the object and changing the file pointer. If you do this, it will cause a 286 // effect of reading the object and changing the file pointer. If you do this, it will cause a
287 // logic error to be thrown from QPDF::inParse(). 287 // logic error to be thrown from QPDF::inParse().
288 288
289 - bad_count = 0; 289 + bad_count_ = 0;
290 bool b_contents = false; 290 bool b_contents = false;
291 291
292 while (true) { 292 while (true) {
293 - if (!tokenizer.nextToken(input, object_description)) {  
294 - warn(tokenizer.getErrorMessage()); 293 + if (!tokenizer_.nextToken(input_, object_description_)) {
  294 + warn(tokenizer_.getErrorMessage());
295 } 295 }
296 - ++good_count; // optimistically 296 + ++good_count_; // optimistically
297 297
298 - if (int_count != 0) { 298 + if (int_count_ != 0) {
299 // Special handling of indirect references. Treat integer tokens as part of an indirect 299 // Special handling of indirect references. Treat integer tokens as part of an indirect
300 // reference until proven otherwise. 300 // reference until proven otherwise.
301 - if (tokenizer.getType() == QPDFTokenizer::tt_integer) {  
302 - if (++int_count > 2) { 301 + if (tokenizer_.getType() == QPDFTokenizer::tt_integer) {
  302 + if (++int_count_ > 2) {
303 // Process the oldest buffered integer. 303 // Process the oldest buffered integer.
304 - addInt(int_count); 304 + addInt(int_count_);
305 } 305 }
306 - last_offset_buffer[int_count % 2] = input.getLastOffset();  
307 - int_buffer[int_count % 2] = QUtil::string_to_ll(tokenizer.getValue().c_str()); 306 + last_offset_buffer_[int_count_ % 2] = input_.getLastOffset();
  307 + int_buffer_[int_count_ % 2] = QUtil::string_to_ll(tokenizer_.getValue().c_str());
308 continue; 308 continue;
309 309
310 } else if ( 310 } else if (
311 - int_count >= 2 && tokenizer.getType() == QPDFTokenizer::tt_word &&  
312 - tokenizer.getValue() == "R") {  
313 - if (!context) { 311 + int_count_ >= 2 && tokenizer_.getType() == QPDFTokenizer::tt_word &&
  312 + tokenizer_.getValue() == "R") {
  313 + if (!context_) {
314 throw std::logic_error( 314 throw std::logic_error(
315 "QPDFParser::parse called without context on an object with indirect " 315 "QPDFParser::parse called without context on an object with indirect "
316 "references"); 316 "references");
317 } 317 }
318 - auto id = QIntC::to_int(int_buffer[(int_count - 1) % 2]);  
319 - auto gen = QIntC::to_int(int_buffer[(int_count) % 2]); 318 + auto id = QIntC::to_int(int_buffer_[(int_count_ - 1) % 2]);
  319 + auto gen = QIntC::to_int(int_buffer_[(int_count_) % 2]);
320 if (!(id < 1 || gen < 0 || gen >= 65535)) { 320 if (!(id < 1 || gen < 0 || gen >= 65535)) {
321 - add(ParseGuard::getObject(context, id, gen, parse_pdf)); 321 + add(ParseGuard::getObject(context_, id, gen, parse_pdf_));
322 } else { 322 } else {
323 add_bad_null( 323 add_bad_null(
324 "treating bad indirect reference (" + std::to_string(id) + " " + 324 "treating bad indirect reference (" + std::to_string(id) + " " +
325 std::to_string(gen) + " R) as null"); 325 std::to_string(gen) + " R) as null");
326 } 326 }
327 - int_count = 0; 327 + int_count_ = 0;
328 continue; 328 continue;
329 329
330 - } else if (int_count > 0) { 330 + } else if (int_count_ > 0) {
331 // Process the buffered integers before processing the current token. 331 // Process the buffered integers before processing the current token.
332 - if (int_count > 1) {  
333 - addInt(int_count - 1); 332 + if (int_count_ > 1) {
  333 + addInt(int_count_ - 1);
334 } 334 }
335 - addInt(int_count);  
336 - int_count = 0; 335 + addInt(int_count_);
  336 + int_count_ = 0;
337 } 337 }
338 } 338 }
339 339
340 - switch (tokenizer.getType()) { 340 + switch (tokenizer_.getType()) {
341 case QPDFTokenizer::tt_eof: 341 case QPDFTokenizer::tt_eof:
342 warn("parse error while reading object"); 342 warn("parse error while reading object");
343 if (content_stream) { 343 if (content_stream) {
@@ -358,23 +358,23 @@ QPDFParser::parseRemainder(bool content_stream) @@ -358,23 +358,23 @@ QPDFParser::parseRemainder(bool content_stream)
358 continue; 358 continue;
359 359
360 case QPDFTokenizer::tt_array_close: 360 case QPDFTokenizer::tt_array_close:
361 - if (frame->state == st_array) {  
362 - auto object = frame->null_count > 100  
363 - ? QPDFObject::create<QPDF_Array>(std::move(frame->olist), true)  
364 - : QPDFObject::create<QPDF_Array>(std::move(frame->olist));  
365 - setDescription(object, frame->offset - 1); 361 + if (frame_->state == st_array) {
  362 + auto object = frame_->null_count > 100
  363 + ? QPDFObject::create<QPDF_Array>(std::move(frame_->olist), true)
  364 + : QPDFObject::create<QPDF_Array>(std::move(frame_->olist));
  365 + setDescription(object, frame_->offset - 1);
366 // The `offset` points to the next of "[". Set the rewind offset to point to the 366 // The `offset` points to the next of "[". Set the rewind offset to point to the
367 // beginning of "[". This has been explicitly tested with whitespace surrounding the 367 // beginning of "[". This has been explicitly tested with whitespace surrounding the
368 // array start delimiter. getLastOffset points to the array end token and therefore 368 // array start delimiter. getLastOffset points to the array end token and therefore
369 // can't be used here. 369 // can't be used here.
370 - if (stack.size() <= 1) { 370 + if (stack_.size() <= 1) {
371 return object; 371 return object;
372 } 372 }
373 - stack.pop_back();  
374 - frame = &stack.back(); 373 + stack_.pop_back();
  374 + frame_ = &stack_.back();
375 add(std::move(object)); 375 add(std::move(object));
376 } else { 376 } else {
377 - if (sanity_checks) { 377 + if (sanity_checks_) {
378 // During sanity checks, assume nesting of containers is corrupt and object is 378 // During sanity checks, assume nesting of containers is corrupt and object is
379 // unusable. 379 // unusable.
380 warn("unexpected array close token; giving up on reading object"); 380 warn("unexpected array close token; giving up on reading object");
@@ -385,46 +385,46 @@ QPDFParser::parseRemainder(bool content_stream) @@ -385,46 +385,46 @@ QPDFParser::parseRemainder(bool content_stream)
385 continue; 385 continue;
386 386
387 case QPDFTokenizer::tt_dict_close: 387 case QPDFTokenizer::tt_dict_close:
388 - if (frame->state <= st_dictionary_value) { 388 + if (frame_->state <= st_dictionary_value) {
389 // Attempt to recover more or less gracefully from invalid dictionaries. 389 // Attempt to recover more or less gracefully from invalid dictionaries.
390 - auto& dict = frame->dict; 390 + auto& dict = frame_->dict;
391 391
392 - if (frame->state == st_dictionary_value) { 392 + if (frame_->state == st_dictionary_value) {
393 warn( 393 warn(
394 - frame->offset, 394 + frame_->offset,
395 "dictionary ended prematurely; using null as value for last key"); 395 "dictionary ended prematurely; using null as value for last key");
396 - dict[frame->key] = QPDFObject::create<QPDF_Null>(); 396 + dict[frame_->key] = QPDFObject::create<QPDF_Null>();
397 } 397 }
398 - if (!frame->olist.empty()) {  
399 - if (sanity_checks) { 398 + if (!frame_->olist.empty()) {
  399 + if (sanity_checks_) {
400 warn( 400 warn(
401 - frame->offset, 401 + frame_->offset,
402 "expected dictionary keys but found non-name objects; ignoring"); 402 "expected dictionary keys but found non-name objects; ignoring");
403 } else { 403 } else {
404 fixMissingKeys(); 404 fixMissingKeys();
405 } 405 }
406 } 406 }
407 407
408 - if (!frame->contents_string.empty() && dict.contains("/Type") && 408 + if (!frame_->contents_string.empty() && dict.contains("/Type") &&
409 dict["/Type"].isNameAndEquals("/Sig") && dict.contains("/ByteRange") && 409 dict["/Type"].isNameAndEquals("/Sig") && dict.contains("/ByteRange") &&
410 dict.contains("/Contents") && dict["/Contents"].isString()) { 410 dict.contains("/Contents") && dict["/Contents"].isString()) {
411 - dict["/Contents"] = QPDFObjectHandle::newString(frame->contents_string);  
412 - dict["/Contents"].setParsedOffset(frame->contents_offset); 411 + dict["/Contents"] = QPDFObjectHandle::newString(frame_->contents_string);
  412 + dict["/Contents"].setParsedOffset(frame_->contents_offset);
413 } 413 }
414 auto object = QPDFObject::create<QPDF_Dictionary>(std::move(dict)); 414 auto object = QPDFObject::create<QPDF_Dictionary>(std::move(dict));
415 - setDescription(object, frame->offset - 2); 415 + setDescription(object, frame_->offset - 2);
416 // The `offset` points to the next of "<<". Set the rewind offset to point to the 416 // The `offset` points to the next of "<<". Set the rewind offset to point to the
417 // beginning of "<<". This has been explicitly tested with whitespace surrounding 417 // beginning of "<<". This has been explicitly tested with whitespace surrounding
418 // the dictionary start delimiter. getLastOffset points to the dictionary end token 418 // the dictionary start delimiter. getLastOffset points to the dictionary end token
419 // and therefore can't be used here. 419 // and therefore can't be used here.
420 - if (stack.size() <= 1) { 420 + if (stack_.size() <= 1) {
421 return object; 421 return object;
422 } 422 }
423 - stack.pop_back();  
424 - frame = &stack.back(); 423 + stack_.pop_back();
  424 + frame_ = &stack_.back();
425 add(std::move(object)); 425 add(std::move(object));
426 } else { 426 } else {
427 - if (sanity_checks) { 427 + if (sanity_checks_) {
428 // During sanity checks, assume nesting of containers is corrupt and object is 428 // During sanity checks, assume nesting of containers is corrupt and object is
429 // unusable. 429 // unusable.
430 warn("unexpected dictionary close token; giving up on reading object"); 430 warn("unexpected dictionary close token; giving up on reading object");
@@ -436,20 +436,20 @@ QPDFParser::parseRemainder(bool content_stream) @@ -436,20 +436,20 @@ QPDFParser::parseRemainder(bool content_stream)
436 436
437 case QPDFTokenizer::tt_array_open: 437 case QPDFTokenizer::tt_array_open:
438 case QPDFTokenizer::tt_dict_open: 438 case QPDFTokenizer::tt_dict_open:
439 - if (stack.size() > max_nesting) { 439 + if (stack_.size() > max_nesting) {
440 limits_error( 440 limits_error(
441 "parser-max-nesting", "ignoring excessively deeply nested data structure"); 441 "parser-max-nesting", "ignoring excessively deeply nested data structure");
442 } 442 }
443 b_contents = false; 443 b_contents = false;
444 - stack.emplace_back(  
445 - input,  
446 - (tokenizer.getType() == QPDFTokenizer::tt_array_open) ? st_array  
447 - : st_dictionary_key);  
448 - frame = &stack.back(); 444 + stack_.emplace_back(
  445 + input_,
  446 + (tokenizer_.getType() == QPDFTokenizer::tt_array_open) ? st_array
  447 + : st_dictionary_key);
  448 + frame_ = &stack_.back();
449 continue; 449 continue;
450 450
451 case QPDFTokenizer::tt_bool: 451 case QPDFTokenizer::tt_bool:
452 - addScalar<QPDF_Bool>(tokenizer.getValue() == "true"); 452 + addScalar<QPDF_Bool>(tokenizer_.getValue() == "true");
453 continue; 453 continue;
454 454
455 case QPDFTokenizer::tt_null: 455 case QPDFTokenizer::tt_null:
@@ -459,37 +459,37 @@ QPDFParser::parseRemainder(bool content_stream) @@ -459,37 +459,37 @@ QPDFParser::parseRemainder(bool content_stream)
459 case QPDFTokenizer::tt_integer: 459 case QPDFTokenizer::tt_integer:
460 if (!content_stream) { 460 if (!content_stream) {
461 // Buffer token in case it is part of an indirect reference. 461 // Buffer token in case it is part of an indirect reference.
462 - last_offset_buffer[1] = input.getLastOffset();  
463 - int_buffer[1] = QUtil::string_to_ll(tokenizer.getValue().c_str());  
464 - int_count = 1; 462 + last_offset_buffer_[1] = input_.getLastOffset();
  463 + int_buffer_[1] = QUtil::string_to_ll(tokenizer_.getValue().c_str());
  464 + int_count_ = 1;
465 } else { 465 } else {
466 - addScalar<QPDF_Integer>(QUtil::string_to_ll(tokenizer.getValue().c_str())); 466 + addScalar<QPDF_Integer>(QUtil::string_to_ll(tokenizer_.getValue().c_str()));
467 } 467 }
468 continue; 468 continue;
469 469
470 case QPDFTokenizer::tt_real: 470 case QPDFTokenizer::tt_real:
471 - addScalar<QPDF_Real>(tokenizer.getValue()); 471 + addScalar<QPDF_Real>(tokenizer_.getValue());
472 continue; 472 continue;
473 473
474 case QPDFTokenizer::tt_name: 474 case QPDFTokenizer::tt_name:
475 - if (frame->state == st_dictionary_key) {  
476 - frame->key = tokenizer.getValue();  
477 - frame->state = st_dictionary_value;  
478 - b_contents = decrypter && frame->key == "/Contents"; 475 + if (frame_->state == st_dictionary_key) {
  476 + frame_->key = tokenizer_.getValue();
  477 + frame_->state = st_dictionary_value;
  478 + b_contents = decrypter_ && frame_->key == "/Contents";
479 continue; 479 continue;
480 } else { 480 } else {
481 - addScalar<QPDF_Name>(tokenizer.getValue()); 481 + addScalar<QPDF_Name>(tokenizer_.getValue());
482 } 482 }
483 continue; 483 continue;
484 484
485 case QPDFTokenizer::tt_word: 485 case QPDFTokenizer::tt_word:
486 if (content_stream) { 486 if (content_stream) {
487 - addScalar<QPDF_Operator>(tokenizer.getValue()); 487 + addScalar<QPDF_Operator>(tokenizer_.getValue());
488 continue; 488 continue;
489 } 489 }
490 490
491 - if (sanity_checks) {  
492 - if (tokenizer.getValue() == "endobj" || tokenizer.getValue() == "endstream") { 491 + if (sanity_checks_) {
  492 + if (tokenizer_.getValue() == "endobj" || tokenizer_.getValue() == "endstream") {
493 // During sanity checks, assume an unexpected endobj or endstream indicates that 493 // During sanity checks, assume an unexpected endobj or endstream indicates that
494 // we are parsing past the end of the object. 494 // we are parsing past the end of the object.
495 warn( 495 warn(
@@ -504,21 +504,21 @@ QPDFParser::parseRemainder(bool content_stream) @@ -504,21 +504,21 @@ QPDFParser::parseRemainder(bool content_stream)
504 504
505 warn("unknown token while reading object; treating as string"); 505 warn("unknown token while reading object; treating as string");
506 check_too_many_bad_tokens(); 506 check_too_many_bad_tokens();
507 - addScalar<QPDF_String>(tokenizer.getValue()); 507 + addScalar<QPDF_String>(tokenizer_.getValue());
508 508
509 continue; 509 continue;
510 510
511 case QPDFTokenizer::tt_string: 511 case QPDFTokenizer::tt_string:
512 { 512 {
513 - auto const& val = tokenizer.getValue();  
514 - if (decrypter) { 513 + auto const& val = tokenizer_.getValue();
  514 + if (decrypter_) {
515 if (b_contents) { 515 if (b_contents) {
516 - frame->contents_string = val;  
517 - frame->contents_offset = input.getLastOffset(); 516 + frame_->contents_string = val;
  517 + frame_->contents_offset = input_.getLastOffset();
518 b_contents = false; 518 b_contents = false;
519 } 519 }
520 std::string s{val}; 520 std::string s{val};
521 - decrypter->decryptString(s); 521 + decrypter_->decryptString(s);
522 addScalar<QPDF_String>(s); 522 addScalar<QPDF_String>(s);
523 } else { 523 } else {
524 addScalar<QPDF_String>(val); 524 addScalar<QPDF_String>(val);
@@ -535,15 +535,15 @@ QPDFParser::parseRemainder(bool content_stream) @@ -535,15 +535,15 @@ QPDFParser::parseRemainder(bool content_stream)
535 void 535 void
536 QPDFParser::add(std::shared_ptr<QPDFObject>&& obj) 536 QPDFParser::add(std::shared_ptr<QPDFObject>&& obj)
537 { 537 {
538 - if (frame->state != st_dictionary_value) { 538 + if (frame_->state != st_dictionary_value) {
539 // If state is st_dictionary_key then there is a missing key. Push onto olist for 539 // If state is st_dictionary_key then there is a missing key. Push onto olist for
540 // processing once the tt_dict_close token has been found. 540 // processing once the tt_dict_close token has been found.
541 - frame->olist.emplace_back(std::move(obj)); 541 + frame_->olist.emplace_back(std::move(obj));
542 } else { 542 } else {
543 - if (auto res = frame->dict.insert_or_assign(frame->key, std::move(obj)); !res.second) { 543 + if (auto res = frame_->dict.insert_or_assign(frame_->key, std::move(obj)); !res.second) {
544 warnDuplicateKey(); 544 warnDuplicateKey();
545 } 545 }
546 - frame->state = st_dictionary_key; 546 + frame_->state = st_dictionary_key;
547 } 547 }
548 } 548 }
549 549
@@ -552,17 +552,17 @@ QPDFParser::addNull() @@ -552,17 +552,17 @@ QPDFParser::addNull()
552 { 552 {
553 const static ObjectPtr null_obj = QPDFObject::create<QPDF_Null>(); 553 const static ObjectPtr null_obj = QPDFObject::create<QPDF_Null>();
554 554
555 - if (frame->state != st_dictionary_value) { 555 + if (frame_->state != st_dictionary_value) {
556 // If state is st_dictionary_key then there is a missing key. Push onto olist for 556 // If state is st_dictionary_key then there is a missing key. Push onto olist for
557 // processing once the tt_dict_close token has been found. 557 // processing once the tt_dict_close token has been found.
558 - frame->olist.emplace_back(null_obj); 558 + frame_->olist.emplace_back(null_obj);
559 } else { 559 } else {
560 - if (auto res = frame->dict.insert_or_assign(frame->key, null_obj); !res.second) { 560 + if (auto res = frame_->dict.insert_or_assign(frame_->key, null_obj); !res.second) {
561 warnDuplicateKey(); 561 warnDuplicateKey();
562 } 562 }
563 - frame->state = st_dictionary_key; 563 + frame_->state = st_dictionary_key;
564 } 564 }
565 - ++frame->null_count; 565 + ++frame_->null_count;
566 } 566 }
567 567
568 void 568 void
@@ -576,8 +576,8 @@ QPDFParser::add_bad_null(std::string const&amp; msg) @@ -576,8 +576,8 @@ QPDFParser::add_bad_null(std::string const&amp; msg)
576 void 576 void
577 QPDFParser::addInt(int count) 577 QPDFParser::addInt(int count)
578 { 578 {
579 - auto obj = QPDFObject::create<QPDF_Integer>(int_buffer[count % 2]);  
580 - obj->setDescription(context, description, last_offset_buffer[count % 2]); 579 + auto obj = QPDFObject::create<QPDF_Integer>(int_buffer_[count % 2]);
  580 + obj->setDescription(context_, description_, last_offset_buffer_[count % 2]);
581 add(std::move(obj)); 581 add(std::move(obj));
582 } 582 }
583 583
@@ -585,15 +585,15 @@ template &lt;typename T, typename... Args&gt; @@ -585,15 +585,15 @@ template &lt;typename T, typename... Args&gt;
585 void 585 void
586 QPDFParser::addScalar(Args&&... args) 586 QPDFParser::addScalar(Args&&... args)
587 { 587 {
588 - auto limit = Limits::parser_max_container_size(bad_count || sanity_checks);  
589 - if (frame->olist.size() >= limit || frame->dict.size() >= limit) { 588 + auto limit = Limits::parser_max_container_size(bad_count_ || sanity_checks_);
  589 + if (frame_->olist.size() >= limit || frame_->dict.size() >= limit) {
590 // Stop adding scalars. We are going to abort when the close token or a bad token is 590 // Stop adding scalars. We are going to abort when the close token or a bad token is
591 // encountered. 591 // encountered.
592 - max_bad_count = 1; 592 + max_bad_count_ = 1;
593 check_too_many_bad_tokens(); // always throws Error() 593 check_too_many_bad_tokens(); // always throws Error()
594 } 594 }
595 auto obj = QPDFObject::create<T>(std::forward<Args>(args)...); 595 auto obj = QPDFObject::create<T>(std::forward<Args>(args)...);
596 - obj->setDescription(context, description, input.getLastOffset()); 596 + obj->setDescription(context_, description_, input_.getLastOffset());
597 add(std::move(obj)); 597 add(std::move(obj));
598 } 598 }
599 599
@@ -602,7 +602,7 @@ QPDFObjectHandle @@ -602,7 +602,7 @@ QPDFObjectHandle
602 QPDFParser::withDescription(Args&&... args) 602 QPDFParser::withDescription(Args&&... args)
603 { 603 {
604 auto obj = QPDFObject::create<T>(std::forward<Args>(args)...); 604 auto obj = QPDFObject::create<T>(std::forward<Args>(args)...);
605 - obj->setDescription(context, description, start); 605 + obj->setDescription(context_, description_, start_);
606 return {obj}; 606 return {obj};
607 } 607 }
608 608
@@ -610,7 +610,7 @@ void @@ -610,7 +610,7 @@ void
610 QPDFParser::setDescription(ObjectPtr& obj, qpdf_offset_t parsed_offset) 610 QPDFParser::setDescription(ObjectPtr& obj, qpdf_offset_t parsed_offset)
611 { 611 {
612 if (obj) { 612 if (obj) {
613 - obj->setDescription(context, description, parsed_offset); 613 + obj->setDescription(context_, description_, parsed_offset);
614 } 614 }
615 } 615 }
616 616
@@ -618,22 +618,22 @@ void @@ -618,22 +618,22 @@ void
618 QPDFParser::fixMissingKeys() 618 QPDFParser::fixMissingKeys()
619 { 619 {
620 std::set<std::string> names; 620 std::set<std::string> names;
621 - for (auto& obj: frame->olist) { 621 + for (auto& obj: frame_->olist) {
622 if (obj.raw_type_code() == ::ot_name) { 622 if (obj.raw_type_code() == ::ot_name) {
623 names.insert(obj.obj_sp()->getStringValue()); 623 names.insert(obj.obj_sp()->getStringValue());
624 } 624 }
625 } 625 }
626 int next_fake_key = 1; 626 int next_fake_key = 1;
627 - for (auto const& item: frame->olist) { 627 + for (auto const& item: frame_->olist) {
628 while (true) { 628 while (true) {
629 const std::string key = "/QPDFFake" + std::to_string(next_fake_key++); 629 const std::string key = "/QPDFFake" + std::to_string(next_fake_key++);
630 - const bool found_fake = !frame->dict.contains(key) && !names.contains(key); 630 + const bool found_fake = !frame_->dict.contains(key) && !names.contains(key);
631 QTC::TC("qpdf", "QPDFParser found fake", (found_fake ? 0 : 1)); 631 QTC::TC("qpdf", "QPDFParser found fake", (found_fake ? 0 : 1));
632 if (found_fake) { 632 if (found_fake) {
633 warn( 633 warn(
634 - frame->offset, 634 + frame_->offset,
635 "expected dictionary key but found non-name object; inserting key " + key); 635 "expected dictionary key but found non-name object; inserting key " + key);
636 - frame->dict[key] = item; 636 + frame_->dict[key] = item;
637 break; 637 break;
638 } 638 }
639 } 639 }
@@ -643,9 +643,9 @@ QPDFParser::fixMissingKeys() @@ -643,9 +643,9 @@ QPDFParser::fixMissingKeys()
643 void 643 void
644 QPDFParser::check_too_many_bad_tokens() 644 QPDFParser::check_too_many_bad_tokens()
645 { 645 {
646 - auto limit = Limits::parser_max_container_size(bad_count || sanity_checks);  
647 - if (frame->olist.size() >= limit || frame->dict.size() >= limit) {  
648 - if (bad_count) { 646 + auto limit = Limits::parser_max_container_size(bad_count_ || sanity_checks_);
  647 + if (frame_->olist.size() >= limit || frame_->dict.size() >= limit) {
  648 + if (bad_count_) {
649 limits_error( 649 limits_error(
650 "parser-max-container-size-damaged", 650 "parser-max-container-size-damaged",
651 "encountered errors while parsing an array or dictionary with more than " + 651 "encountered errors while parsing an array or dictionary with more than " +
@@ -656,23 +656,23 @@ QPDFParser::check_too_many_bad_tokens() @@ -656,23 +656,23 @@ QPDFParser::check_too_many_bad_tokens()
656 "encountered an array or dictionary with more than " + std::to_string(limit) + 656 "encountered an array or dictionary with more than " + std::to_string(limit) +
657 " elements during xref recovery; giving up on reading object"); 657 " elements during xref recovery; giving up on reading object");
658 } 658 }
659 - if (max_bad_count && --max_bad_count == 0) { 659 + if (max_bad_count_ && --max_bad_count_ == 0) {
660 limits_error( 660 limits_error(
661 "parser-max-errors", "too many errors during parsing; treating object as null"); 661 "parser-max-errors", "too many errors during parsing; treating object as null");
662 } 662 }
663 - if (good_count > 4) {  
664 - good_count = 0;  
665 - bad_count = 1; 663 + if (good_count_ > 4) {
  664 + good_count_ = 0;
  665 + bad_count_ = 1;
666 return; 666 return;
667 } 667 }
668 - if (++bad_count > 5 ||  
669 - (frame->state != st_array && std::cmp_less(max_bad_count, frame->olist.size()))) { 668 + if (++bad_count_ > 5 ||
  669 + (frame_->state != st_array && std::cmp_less(max_bad_count_, frame_->olist.size()))) {
670 // Give up after 5 errors in close proximity or if the number of missing dictionary keys 670 // Give up after 5 errors in close proximity or if the number of missing dictionary keys
671 // exceeds the remaining number of allowable total errors. 671 // exceeds the remaining number of allowable total errors.
672 warn("too many errors; giving up on reading object"); 672 warn("too many errors; giving up on reading object");
673 throw Error(); 673 throw Error();
674 } 674 }
675 - good_count = 0; 675 + good_count_ = 0;
676 } 676 }
677 677
678 void 678 void
@@ -689,8 +689,8 @@ QPDFParser::warn(QPDFExc const&amp; e) const @@ -689,8 +689,8 @@ QPDFParser::warn(QPDFExc const&amp; e) const
689 // If parsing on behalf of a QPDF object and want to give a warning, we can warn through the 689 // If parsing on behalf of a QPDF object and want to give a warning, we can warn through the
690 // object. If parsing for some other reason, such as an explicit creation of an object from a 690 // object. If parsing for some other reason, such as an explicit creation of an object from a
691 // string, then just throw the exception. 691 // string, then just throw the exception.
692 - if (context) {  
693 - context->warn(e); 692 + if (context_) {
  693 + context_->warn(e);
694 } else { 694 } else {
695 throw e; 695 throw e;
696 } 696 }
@@ -700,24 +700,25 @@ void @@ -700,24 +700,25 @@ void
700 QPDFParser::warnDuplicateKey() 700 QPDFParser::warnDuplicateKey()
701 { 701 {
702 warn( 702 warn(
703 - frame->offset,  
704 - "dictionary has duplicated key " + frame->key + "; last occurrence overrides earlier ones"); 703 + frame_->offset,
  704 + "dictionary has duplicated key " + frame_->key +
  705 + "; last occurrence overrides earlier ones");
705 } 706 }
706 707
707 void 708 void
708 QPDFParser::warn(qpdf_offset_t offset, std::string const& msg) const 709 QPDFParser::warn(qpdf_offset_t offset, std::string const& msg) const
709 { 710 {
710 - if (stream_id) {  
711 - std::string descr = "object "s + std::to_string(obj_id) + " 0";  
712 - std::string name = context->getFilename() + " object stream " + std::to_string(stream_id); 711 + if (stream_id_) {
  712 + std::string descr = "object "s + std::to_string(obj_id_) + " 0";
  713 + std::string name = context_->getFilename() + " object stream " + std::to_string(stream_id_);
713 warn(QPDFExc(qpdf_e_damaged_pdf, name, descr, offset, msg)); 714 warn(QPDFExc(qpdf_e_damaged_pdf, name, descr, offset, msg));
714 } else { 715 } else {
715 - warn(QPDFExc(qpdf_e_damaged_pdf, input.getName(), object_description, offset, msg)); 716 + warn(QPDFExc(qpdf_e_damaged_pdf, input_.getName(), object_description_, offset, msg));
716 } 717 }
717 } 718 }
718 719
719 void 720 void
720 QPDFParser::warn(std::string const& msg) const 721 QPDFParser::warn(std::string const& msg) const
721 { 722 {
722 - warn(input.getLastOffset(), msg); 723 + warn(input_.getLastOffset(), msg);
723 } 724 }
libqpdf/qpdf/QPDFParser.hh
@@ -77,16 +77,16 @@ class QPDFParser @@ -77,16 +77,16 @@ class QPDFParser
77 int stream_id = 0, 77 int stream_id = 0,
78 int obj_id = 0, 78 int obj_id = 0,
79 bool sanity_checks = false) : 79 bool sanity_checks = false) :
80 - input(input),  
81 - object_description(object_description),  
82 - tokenizer(tokenizer),  
83 - decrypter(decrypter),  
84 - context(context),  
85 - description(std::move(sp_description)),  
86 - parse_pdf(parse_pdf),  
87 - stream_id(stream_id),  
88 - obj_id(obj_id),  
89 - sanity_checks(sanity_checks) 80 + input_(input),
  81 + object_description_(object_description),
  82 + tokenizer_(tokenizer),
  83 + decrypter_(decrypter),
  84 + context_(context),
  85 + description_(std::move(sp_description)),
  86 + parse_pdf_(parse_pdf),
  87 + stream_id_(stream_id),
  88 + obj_id_(obj_id),
  89 + sanity_checks_(sanity_checks)
90 { 90 {
91 } 91 }
92 92
@@ -133,32 +133,32 @@ class QPDFParser @@ -133,32 +133,32 @@ class QPDFParser
133 // NB the offset includes any leading whitespace. 133 // NB the offset includes any leading whitespace.
134 QPDFObjectHandle withDescription(Args&&... args); 134 QPDFObjectHandle withDescription(Args&&... args);
135 void setDescription(std::shared_ptr<QPDFObject>& obj, qpdf_offset_t parsed_offset); 135 void setDescription(std::shared_ptr<QPDFObject>& obj, qpdf_offset_t parsed_offset);
136 - InputSource& input;  
137 - std::string const& object_description;  
138 - qpdf::Tokenizer& tokenizer;  
139 - QPDFObjectHandle::StringDecrypter* decrypter;  
140 - QPDF* context;  
141 - std::shared_ptr<QPDFObject::Description> description;  
142 - bool parse_pdf{false};  
143 - int stream_id{0};  
144 - int obj_id{0};  
145 - bool sanity_checks{false};  
146 -  
147 - std::vector<StackFrame> stack;  
148 - StackFrame* frame{nullptr}; 136 + InputSource& input_;
  137 + std::string const& object_description_;
  138 + qpdf::Tokenizer& tokenizer_;
  139 + QPDFObjectHandle::StringDecrypter* decrypter_;
  140 + QPDF* context_;
  141 + std::shared_ptr<QPDFObject::Description> description_;
  142 + bool parse_pdf_{false};
  143 + int stream_id_{0};
  144 + int obj_id_{0};
  145 + bool sanity_checks_{false};
  146 +
  147 + std::vector<StackFrame> stack_;
  148 + StackFrame* frame_{nullptr};
149 // Number of recent bad tokens. This will always be > 0 once a bad token has been encountered as 149 // Number of recent bad tokens. This will always be > 0 once a bad token has been encountered as
150 // it only gets incremented or reset when a bad token is encountered. 150 // it only gets incremented or reset when a bad token is encountered.
151 - int bad_count{0}; 151 + int bad_count_{0};
152 // Number of bad tokens (remaining) before giving up. 152 // Number of bad tokens (remaining) before giving up.
153 - uint32_t max_bad_count{Limits::parser_max_errors()}; 153 + uint32_t max_bad_count_{Limits::parser_max_errors()};
154 // Number of good tokens since last bad token. Irrelevant if bad_count == 0. 154 // Number of good tokens since last bad token. Irrelevant if bad_count == 0.
155 - int good_count{0}; 155 + int good_count_{0};
156 // Start offset including any leading whitespace. 156 // Start offset including any leading whitespace.
157 - qpdf_offset_t start{0}; 157 + qpdf_offset_t start_{0};
158 // Number of successive integer tokens. 158 // Number of successive integer tokens.
159 - int int_count{0};  
160 - long long int_buffer[2]{0, 0};  
161 - qpdf_offset_t last_offset_buffer[2]{0, 0}; 159 + int int_count_{0};
  160 + long long int_buffer_[2]{0, 0};
  161 + qpdf_offset_t last_offset_buffer_[2]{0, 0};
162 bool empty_{false}; 162 bool empty_{false};
163 }; 163 };
164 164