diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh index 84e31ae..fd1e4ce 100644 --- a/include/qpdf/QPDF.hh +++ b/include/qpdf/QPDF.hh @@ -743,7 +743,6 @@ class QPDF class ObjCache; class EncryptionParameters; - class ForeignStreamData; class StringDecrypter; class ResolveRecorder; class JSONReactor; diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index b580058..4bc3eda 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -112,8 +112,7 @@ namespace }; } // namespace -QPDF::ForeignStreamData::ForeignStreamData( - Stream& foreign, qpdf_offset_t offset, QPDFObjectHandle local_dict) : +Streams::Copier::Data::Data(Stream& foreign, qpdf_offset_t offset, QPDFObjectHandle local_dict) : encp(foreign.qpdf()->m->encp), file(foreign.qpdf()->m->file), foreign_og(foreign.id_gen()), @@ -715,8 +714,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign_oh) result.replaceStreamData( m->objects.streams().copier(), dict["/Filter"], dict["/DecodeParms"]); } else { - auto foreign_stream_data = ForeignStreamData(foreign, foreign_oh.offset(), dict); - m->objects.streams().copier()->register_copy(local_og, foreign_stream_data); + m->objects.streams().copier()->register_copy(local_og, foreign, foreign_oh.offset(), dict); result.replaceStreamData( m->objects.streams().copier(), dict["/Filter"], dict["/DecodeParms"]); } diff --git a/libqpdf/qpdf/QPDF_private.hh b/libqpdf/qpdf/QPDF_private.hh index 2fb827a..c898a01 100644 --- a/libqpdf/qpdf/QPDF_private.hh +++ b/libqpdf/qpdf/QPDF_private.hh @@ -89,23 +89,6 @@ class QPDF::EncryptionParameters bool owner_password_matched{false}; }; -class QPDF::ForeignStreamData -{ - friend class QPDF; - - public: - ForeignStreamData(Stream& foreign, qpdf_offset_t offset, QPDFObjectHandle local_dict); - - private: - std::shared_ptr encp; - std::shared_ptr file; - QPDFObjGen foreign_og; - qpdf_offset_t offset; - size_t length; - QPDFObjectHandle local_dict; - bool is_root_metadata{false}; -}; - class QPDF::StringDecrypter final: public QPDFObjectHandle::StringDecrypter { friend class QPDF; @@ -599,6 +582,23 @@ class QPDF::Doc // local and foreign streams. class Copier final: public QPDFObjectHandle::StreamDataProvider { + class Data + { + friend class Streams; + + public: + Data(Stream& foreign, qpdf_offset_t offset, QPDFObjectHandle local_dict); + + private: + std::shared_ptr encp; + std::shared_ptr file; + QPDFObjGen foreign_og; + qpdf_offset_t offset; + size_t length; + QPDFObjectHandle local_dict; + bool is_root_metadata{false}; + }; + public: Copier() = delete; Copier(StreamDataProvider const&) = delete; @@ -616,21 +616,25 @@ class QPDF::Doc bool will_retry) final; void - register_copy(QPDFObjGen local_og, QPDFObjectHandle foreign_stream) + register_copy(QPDFObjGen local_og, QPDFObjectHandle const& foreign_stream) { copied_streams.insert_or_assign(local_og, foreign_stream); } void - register_copy(QPDFObjGen local_og, ForeignStreamData foreign_stream) + register_copy( + QPDFObjGen local_og, + Stream& foreign, + qpdf_offset_t offset, + QPDFObjectHandle const& local_dict) { - copied_data.insert_or_assign(local_og, foreign_stream); + copied_data.insert_or_assign(local_og, Data(foreign, offset, local_dict)); } private: Streams& streams; std::map copied_streams; - std::map copied_data; + std::map copied_data; }; public: