Commit b1d845e708f99f5a77a27b2c0ca088f2f69ea4dd
1 parent
db06e075
Split QPDF member file into file and file_sp to facilitate aliasing
To be encapsulated later.
Showing
2 changed files
with
15 additions
and
8 deletions
libqpdf/QPDF.cc
| @@ -198,7 +198,8 @@ QPDF::EncryptionParameters::EncryptionParameters() : | @@ -198,7 +198,8 @@ QPDF::EncryptionParameters::EncryptionParameters() : | ||
| 198 | 198 | ||
| 199 | QPDF::Members::Members(QPDF& qpdf) : | 199 | QPDF::Members::Members(QPDF& qpdf) : |
| 200 | log(QPDFLogger::defaultLogger()), | 200 | log(QPDFLogger::defaultLogger()), |
| 201 | - file(new InvalidInputSource()), | 201 | + file_sp(new InvalidInputSource()), |
| 202 | + file(file_sp.get()), | ||
| 202 | encp(new EncryptionParameters), | 203 | encp(new EncryptionParameters), |
| 203 | xref_table(qpdf) | 204 | xref_table(qpdf) |
| 204 | { | 205 | { |
| @@ -272,14 +273,16 @@ QPDF::processMemoryFile( | @@ -272,14 +273,16 @@ QPDF::processMemoryFile( | ||
| 272 | void | 273 | void |
| 273 | QPDF::processInputSource(std::shared_ptr<InputSource> source, char const* password) | 274 | QPDF::processInputSource(std::shared_ptr<InputSource> source, char const* password) |
| 274 | { | 275 | { |
| 275 | - m->file = source; | 276 | + m->file_sp = source; |
| 277 | + m->file = source.get(); | ||
| 276 | parse(password); | 278 | parse(password); |
| 277 | } | 279 | } |
| 278 | 280 | ||
| 279 | void | 281 | void |
| 280 | QPDF::closeInputSource() | 282 | QPDF::closeInputSource() |
| 281 | { | 283 | { |
| 282 | - m->file = std::shared_ptr<InputSource>(new InvalidInputSource()); | 284 | + m->file_sp = std::shared_ptr<InputSource>(new InvalidInputSource()); |
| 285 | + m->file = m->file_sp.get(); | ||
| 283 | } | 286 | } |
| 284 | 287 | ||
| 285 | void | 288 | void |
| @@ -412,7 +415,9 @@ QPDF::findHeader() | @@ -412,7 +415,9 @@ QPDF::findHeader() | ||
| 412 | // PDF header, all explicit offsets in the file are such that 0 points to the beginning | 415 | // PDF header, all explicit offsets in the file are such that 0 points to the beginning |
| 413 | // of the header. | 416 | // of the header. |
| 414 | QTC::TC("qpdf", "QPDF global offset"); | 417 | QTC::TC("qpdf", "QPDF global offset"); |
| 415 | - m->file = std::shared_ptr<InputSource>(new OffsetInputSource(m->file, global_offset)); | 418 | + m->file_sp = |
| 419 | + std::shared_ptr<InputSource>(new OffsetInputSource(m->file_sp, global_offset)); | ||
| 420 | + m->file = m->file_sp.get(); | ||
| 416 | } | 421 | } |
| 417 | } | 422 | } |
| 418 | return valid; | 423 | return valid; |
| @@ -1541,7 +1546,7 @@ QPDF::readStream(QPDFObjectHandle& object, QPDFObjGen og, qpdf_offset_t offset) | @@ -1541,7 +1546,7 @@ QPDF::readStream(QPDFObjectHandle& object, QPDFObjGen og, qpdf_offset_t offset) | ||
| 1541 | } catch (QPDFExc& e) { | 1546 | } catch (QPDFExc& e) { |
| 1542 | if (m->attempt_recovery) { | 1547 | if (m->attempt_recovery) { |
| 1543 | warn(e); | 1548 | warn(e); |
| 1544 | - length = recoverStreamLength(m->file, og, stream_offset); | 1549 | + length = recoverStreamLength(m->file_sp, og, stream_offset); |
| 1545 | } else { | 1550 | } else { |
| 1546 | throw; | 1551 | throw; |
| 1547 | } | 1552 | } |
| @@ -2452,7 +2457,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign) | @@ -2452,7 +2457,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign) | ||
| 2452 | } else { | 2457 | } else { |
| 2453 | auto foreign_stream_data = std::make_shared<ForeignStreamData>( | 2458 | auto foreign_stream_data = std::make_shared<ForeignStreamData>( |
| 2454 | foreign_stream_qpdf.m->encp, | 2459 | foreign_stream_qpdf.m->encp, |
| 2455 | - foreign_stream_qpdf.m->file, | 2460 | + foreign_stream_qpdf.m->file_sp, |
| 2456 | foreign.getObjGen(), | 2461 | foreign.getObjGen(), |
| 2457 | stream->getParsedOffset(), | 2462 | stream->getParsedOffset(), |
| 2458 | stream->getLength(), | 2463 | stream->getLength(), |
| @@ -2776,7 +2781,7 @@ QPDF::pipeStreamData( | @@ -2776,7 +2781,7 @@ QPDF::pipeStreamData( | ||
| 2776 | { | 2781 | { |
| 2777 | return pipeStreamData( | 2782 | return pipeStreamData( |
| 2778 | m->encp, | 2783 | m->encp, |
| 2779 | - m->file, | 2784 | + m->file_sp, |
| 2780 | *this, | 2785 | *this, |
| 2781 | og, | 2786 | og, |
| 2782 | offset, | 2787 | offset, |
libqpdf/qpdf/QPDF_private.hh
| @@ -528,7 +528,9 @@ class QPDF::Members | @@ -528,7 +528,9 @@ class QPDF::Members | ||
| 528 | std::shared_ptr<QPDFLogger> log; | 528 | std::shared_ptr<QPDFLogger> log; |
| 529 | unsigned long long unique_id{0}; | 529 | unsigned long long unique_id{0}; |
| 530 | QPDFTokenizer tokenizer; | 530 | QPDFTokenizer tokenizer; |
| 531 | - std::shared_ptr<InputSource> file; | 531 | + // If file_sp is updated, file must also be updated. |
| 532 | + std::shared_ptr<InputSource> file_sp; | ||
| 533 | + InputSource* file; | ||
| 532 | std::string last_object_description; | 534 | std::string last_object_description; |
| 533 | bool provided_password_is_hex_key{false}; | 535 | bool provided_password_is_hex_key{false}; |
| 534 | bool suppress_warnings{false}; | 536 | bool suppress_warnings{false}; |