diff options
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r-- | libqpdf/QPDF.cc | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index c0d6ecc6..ece80668 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -2317,8 +2317,7 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, if (foreign.isReserved()) { throw std::logic_error( - "QPDF: attempting to copy a foreign reserved object: " + - QUtil::int_to_string(foreign.getObjectID())); + "QPDF: attempting to copy a foreign reserved object"); } if (foreign.isPagesObject()) @@ -2491,16 +2490,6 @@ QPDF::replaceForeignIndirectObjects( } PointerHolder<Buffer> stream_buffer = stream->getStreamDataBuffer(); - // Note: at this stage, dictionary keys may still be reserved. - // We have to handle that explicitly if we access anything. - auto get_as_direct = [&old_dict] (std::string const& key) { - QPDFObjectHandle obj = old_dict.getKey(key); - obj.makeDirect(); - return obj; - }; - - QPDFObjectHandle filter = get_as_direct("/Filter"); - QPDFObjectHandle decode_parms = get_as_direct("/DecodeParms"); if ((foreign_stream_qpdf->m->immediate_copy_from) && (stream_buffer.getPointer() == 0)) { @@ -2510,7 +2499,8 @@ QPDF::replaceForeignIndirectObjects( // have to keep duplicating the memory. QTC::TC("qpdf", "QPDF immediate copy stream data"); foreign.replaceStreamData(foreign.getRawStreamData(), - filter, decode_parms); + old_dict.getKey("/Filter"), + old_dict.getKey("/DecodeParms")); stream_buffer = stream->getStreamDataBuffer(); } PointerHolder<QPDFObjectHandle::StreamDataProvider> stream_provider = @@ -2518,7 +2508,9 @@ QPDF::replaceForeignIndirectObjects( if (stream_buffer.getPointer()) { QTC::TC("qpdf", "QPDF copy foreign stream with buffer"); - result.replaceStreamData(stream_buffer, filter, decode_parms); + result.replaceStreamData(stream_buffer, + dict.getKey("/Filter"), + dict.getKey("/DecodeParms")); } else if (stream_provider.getPointer()) { @@ -2527,7 +2519,8 @@ QPDF::replaceForeignIndirectObjects( this->m->copied_stream_data_provider->registerForeignStream( local_og, foreign); result.replaceStreamData(this->m->copied_streams, - filter, decode_parms); + dict.getKey("/Filter"), + dict.getKey("/DecodeParms")); } else { @@ -2545,7 +2538,8 @@ QPDF::replaceForeignIndirectObjects( this->m->copied_stream_data_provider->registerForeignStream( local_og, foreign_stream_data); result.replaceStreamData(this->m->copied_streams, - filter, decode_parms); + dict.getKey("/Filter"), + dict.getKey("/DecodeParms")); } } else |