Commit 38f45c7321a34b37d6e8346b215c17ed7f0558b9
1 parent
9c3deb93
Refactor `ObjectHandle` to introduce `offset()` method
Replace `getParsedOffset()` with the new `offset()` method across `QPDFObjectHandle` and related classes for consistent offset handling. Simplify logic and remove redundant `getParsedOffset()` implementation.
Showing
8 changed files
with
20 additions
and
27 deletions
include/qpdf/ObjectHandle.hh
| ... | ... | @@ -94,6 +94,7 @@ namespace qpdf |
| 94 | 94 | inline QPDFObjGen id_gen() const; |
| 95 | 95 | inline bool indirect() const; |
| 96 | 96 | inline bool null() const; |
| 97 | + inline qpdf_offset_t offset() const; | |
| 97 | 98 | inline QPDF* qpdf() const; |
| 98 | 99 | inline qpdf_object_type_e raw_type_code() const; |
| 99 | 100 | inline qpdf_object_type_e resolved_type_code() const; | ... | ... |
libqpdf/QPDF.cc
| ... | ... | @@ -567,7 +567,7 @@ QPDF::copyForeignObject(QPDFObjectHandle foreign) |
| 567 | 567 | if (!obj_copier.object_map.contains(og)) { |
| 568 | 568 | warn(damagedPDF( |
| 569 | 569 | other.getFilename() + " object " + og.unparse(' '), |
| 570 | - foreign.getParsedOffset(), | |
| 570 | + foreign.offset(), | |
| 571 | 571 | "unexpected reference to /Pages object while copying foreign object; replacing with " |
| 572 | 572 | "null")); |
| 573 | 573 | return QPDFObjectHandle::newNull(); |
| ... | ... | @@ -732,7 +732,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign) |
| 732 | 732 | foreign_stream_qpdf.m->encp, |
| 733 | 733 | foreign_stream_qpdf.m->file, |
| 734 | 734 | foreign, |
| 735 | - foreign.getParsedOffset(), | |
| 735 | + foreign.offset(), | |
| 736 | 736 | stream.getLength(), |
| 737 | 737 | dict, |
| 738 | 738 | stream.isRootMetadata()); | ... | ... |
libqpdf/QPDFObjectHandle.cc
libqpdf/QPDF_Stream.cc
| ... | ... | @@ -350,12 +350,11 @@ Stream::getStreamData(qpdf_stream_decode_level_e decode_level) |
| 350 | 350 | if (!filtered) { |
| 351 | 351 | throw QPDFExc( |
| 352 | 352 | qpdf_e_unsupported, |
| 353 | - obj->getQPDF()->getFilename(), | |
| 353 | + qpdf()->getFilename(), | |
| 354 | 354 | "", |
| 355 | - obj->getParsedOffset(), | |
| 355 | + offset(), | |
| 356 | 356 | "getStreamData called on unfilterable stream"); |
| 357 | 357 | } |
| 358 | - QTC::TC("qpdf", "QPDF_Stream getStreamData"); | |
| 359 | 358 | return result; |
| 360 | 359 | } |
| 361 | 360 | |
| ... | ... | @@ -367,12 +366,11 @@ Stream::getRawStreamData() |
| 367 | 366 | if (!pipeStreamData(&buf, nullptr, 0, qpdf_dl_none, false, false)) { |
| 368 | 367 | throw QPDFExc( |
| 369 | 368 | qpdf_e_unsupported, |
| 370 | - obj->getQPDF()->getFilename(), | |
| 369 | + qpdf()->getFilename(), | |
| 371 | 370 | "", |
| 372 | - obj->getParsedOffset(), | |
| 371 | + offset(), | |
| 373 | 372 | "error getting raw stream data"); |
| 374 | 373 | } |
| 375 | - QTC::TC("qpdf", "QPDF_Stream getRawStreamData"); | |
| 376 | 374 | return result; |
| 377 | 375 | } |
| 378 | 376 | |
| ... | ... | @@ -579,15 +577,13 @@ Stream::pipeStreamData( |
| 579 | 577 | s->stream_dict.replaceKey("/Length", QPDFObjectHandle::newInteger(actual_length)); |
| 580 | 578 | } |
| 581 | 579 | } else { |
| 582 | - if (obj->getParsedOffset() == 0) { | |
| 583 | - QTC::TC("qpdf", "QPDF_Stream pipe no stream data"); | |
| 580 | + if (offset() == 0) { | |
| 584 | 581 | throw std::logic_error("pipeStreamData called for stream with no data"); |
| 585 | 582 | } |
| 586 | - QTC::TC("qpdf", "QPDF_Stream pipe original stream data"); | |
| 587 | 583 | if (!QPDF::Doc::Streams::pipeStreamData( |
| 588 | - obj->getQPDF(), | |
| 589 | - obj->getObjGen(), | |
| 590 | - obj->getParsedOffset(), | |
| 584 | + qpdf(), | |
| 585 | + id_gen(), | |
| 586 | + offset(), | |
| 591 | 587 | s->length, |
| 592 | 588 | s->stream_dict, |
| 593 | 589 | isRootMetadata(), |
| ... | ... | @@ -664,7 +660,7 @@ Stream::replaceFilterData( |
| 664 | 660 | void |
| 665 | 661 | Stream::warn(std::string const& message) |
| 666 | 662 | { |
| 667 | - obj->getQPDF()->warn(qpdf_e_damaged_pdf, "", obj->getParsedOffset(), message); | |
| 663 | + qpdf()->warn(qpdf_e_damaged_pdf, "", offset(), message); | |
| 668 | 664 | } |
| 669 | 665 | |
| 670 | 666 | QPDFObjectHandle | ... | ... |
libqpdf/QPDF_json.cc
| ... | ... | @@ -424,8 +424,7 @@ QPDF::JSONReactor::replaceObject(QPDFObjectHandle&& replacement, JSON const& val |
| 424 | 424 | auto og = tos.object.getObjGen(); |
| 425 | 425 | if (replacement.isIndirect() && !(replacement.isStream() && replacement.getObjGen() == og)) { |
| 426 | 426 | error( |
| 427 | - replacement.getParsedOffset(), | |
| 428 | - "the value of an object may not be an indirect object reference"); | |
| 427 | + replacement.offset(), "the value of an object may not be an indirect object reference"); | |
| 429 | 428 | return; |
| 430 | 429 | } |
| 431 | 430 | pdf.replaceObject(og, replacement); | ... | ... |
libqpdf/qpdf/QPDFObjectHandle_private.hh
| ... | ... | @@ -657,6 +657,12 @@ namespace qpdf |
| 657 | 657 | return !obj || type_code() == ::ot_null; |
| 658 | 658 | } |
| 659 | 659 | |
| 660 | + inline qpdf_offset_t | |
| 661 | + BaseHandle::offset() const | |
| 662 | + { | |
| 663 | + return obj ? obj->parsed_offset : -1; | |
| 664 | + } | |
| 665 | + | |
| 660 | 666 | inline QPDF* |
| 661 | 667 | BaseHandle::qpdf() const |
| 662 | 668 | { | ... | ... |
libqpdf/qpdf/QPDFObject_private.hh
qpdf/qpdf.testcov
| ... | ... | @@ -98,16 +98,12 @@ qpdf-c called qpdf_set_r4_encryption_parameters_insecure 0 |
| 98 | 98 | qpdf-c called qpdf_set_static_aes_IV 0 |
| 99 | 99 | qpdf-c called qpdf_has_error 0 |
| 100 | 100 | qpdf-c called qpdf_get_qpdf_version 0 |
| 101 | -QPDF_Stream pipe original stream data 0 | |
| 102 | 101 | QPDF_Stream pipe replaced stream data 0 |
| 103 | 102 | QPDF_Stream provider length mismatch 0 |
| 104 | 103 | QPDFObjectHandle newStream 0 |
| 105 | 104 | QPDFObjectHandle newStream with data 0 |
| 106 | -QPDF_Stream pipe no stream data 0 | |
| 107 | 105 | QPDFObjectHandle prepend page contents 0 |
| 108 | 106 | QPDFObjectHandle append page contents 0 |
| 109 | -QPDF_Stream getRawStreamData 0 | |
| 110 | -QPDF_Stream getStreamData 0 | |
| 111 | 107 | qpdf-c called qpdf_read_memory 0 |
| 112 | 108 | QPDF stream with CRNL 0 |
| 113 | 109 | QPDFWriter copy encrypt metadata 1 | ... | ... |