aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-02-21 12:35:53 +0100
committerJay Berkenbilt <ejb@ql.org>2021-02-21 12:36:30 +0100
commit92fbc6fdf56bad6aff8c9f3f1a3032d5ad36ec51 (patch)
tree583522ecd2468ef78421fb91a99d866098c12625 /libqpdf
parent60afe4142e4399b12f21aced476df7ef719008b9 (diff)
downloadqpdf-92fbc6fdf56bad6aff8c9f3f1a3032d5ad36ec51.tar.zst
QPDFObjectHandle::copyStream
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDF.cc4
-rw-r--r--libqpdf/QPDFObjectHandle.cc22
2 files changed, 26 insertions, 0 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 5dfc9224..023e0469 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -2596,6 +2596,10 @@ QPDF::replaceForeignIndirectObjects(
void
QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
{
+ // This method was originally written for copying foreign streams,
+ // but it is used by QPDFObjectHandle to copy streams from the
+ // same QPDF object as well.
+
QPDFObjectHandle dict = result.getDict();
QPDFObjectHandle old_dict = foreign.getDict();
if (this->m->copied_stream_data_provider == 0)
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index ceb91630..f6ba3093 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -2877,6 +2877,28 @@ QPDFObjectHandle::copyObject(std::set<QPDFObjGen>& visited,
}
}
+QPDFObjectHandle
+QPDFObjectHandle::copyStream()
+{
+ assertStream();
+ QPDFObjectHandle result = newStream(this->getOwningQPDF());
+ QPDFObjectHandle dict = result.getDict();
+ QPDFObjectHandle old_dict = getDict();
+ for (auto& iter: QPDFDictItems(old_dict))
+ {
+ if (iter.second.isIndirect())
+ {
+ dict.replaceKey(iter.first, iter.second);
+ }
+ else
+ {
+ dict.replaceKey(iter.first, iter.second.shallowCopy());
+ }
+ }
+ QPDF::StreamCopier::copyStreamData(getOwningQPDF(), result, *this);
+ return result;
+}
+
void
QPDFObjectHandle::makeDirect()
{