aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/qpdf/QPDFObjectHandle.hh9
-rw-r--r--libqpdf/QPDFObjectHandle.cc20
2 files changed, 25 insertions, 4 deletions
diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh
index a1819d99..2c24f481 100644
--- a/include/qpdf/QPDFObjectHandle.hh
+++ b/include/qpdf/QPDFObjectHandle.hh
@@ -363,6 +363,15 @@ class QPDFObjectHandle
QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms);
+ // Replace the stream's stream data with the given string.
+ // This method will create a copy of the data rather than using
+ // the user-provided buffer as in the PointerHolder<Buffer> version
+ // of replaceStreamData.
+ QPDF_DLL
+ void replaceStreamData(std::string const& data,
+ QPDFObjectHandle const& filter,
+ QPDFObjectHandle const& decode_parms);
+
// As above, replace this stream's stream data. Instead of
// directly providing a buffer with the stream data, call the
// given provider's provideStreamData method. See comments on the
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index 6bb182e8..54897b83 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -442,6 +442,19 @@ QPDFObjectHandle::replaceStreamData(PointerHolder<Buffer> data,
}
void
+QPDFObjectHandle::replaceStreamData(std::string const& data,
+ QPDFObjectHandle const& filter,
+ QPDFObjectHandle const& decode_parms)
+{
+ assertStream();
+ PointerHolder<Buffer> b = new Buffer(data.length());
+ unsigned char* bp = b->getBuffer();
+ memcpy(bp, (char*)data.c_str(), data.length());
+ dynamic_cast<QPDF_Stream*>(obj.getPointer())->replaceStreamData(
+ b, filter, decode_parms);
+}
+
+void
QPDFObjectHandle::replaceStreamData(PointerHolder<StreamDataProvider> provider,
QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms)
@@ -978,10 +991,9 @@ QPDFObjectHandle
QPDFObjectHandle::newStream(QPDF* qpdf, std::string const& data)
{
QTC::TC("qpdf", "QPDFObjectHandle newStream with string");
- PointerHolder<Buffer> b = new Buffer(data.length());
- unsigned char* bp = b->getBuffer();
- memcpy(bp, (char*)data.c_str(), data.length());
- return QPDFObjectHandle::newStream(qpdf, b);
+ QPDFObjectHandle result = newStream(qpdf);
+ result.replaceStreamData(data, newNull(), newNull());
+ return result;
}
QPDFObjectHandle