aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2020-12-22 15:31:26 +0100
committerJay Berkenbilt <ejb@ql.org>2020-12-26 14:48:18 +0100
commitcc8895078a1d64928e8ee335f1e8c7d6928de1b3 (patch)
treeb8f2ce902ae3a183f5e0a98951d6f7126cc13bc1 /libqpdf
parent573b6eb8b1801b40a4b6eb32cfd159f532876510 (diff)
downloadqpdf-cc8895078a1d64928e8ee335f1e8c7d6928de1b3.tar.zst
Add QPDFObjectHandle::makeDirect(bool allow_streams)
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFObjectHandle.cc26
1 files changed, 20 insertions, 6 deletions
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index 90e1d2d2..e09146e4 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -2605,18 +2605,24 @@ QPDFObjectHandle::shallowCopyInternal(QPDFObjectHandle& new_obj,
}
std::set<QPDFObjGen> visited;
- new_obj.copyObject(visited, false, first_level_only);
+ new_obj.copyObject(visited, false, first_level_only, false);
}
void
QPDFObjectHandle::copyObject(std::set<QPDFObjGen>& visited,
- bool cross_indirect, bool first_level_only)
+ bool cross_indirect, bool first_level_only,
+ bool stop_at_streams)
{
assertInitialized();
if (isStream())
{
- QTC::TC("qpdf", "QPDFObjectHandle ERR clone stream");
+ QTC::TC("qpdf", "QPDFObjectHandle copy stream",
+ stop_at_streams ? 0 : 1);
+ if (stop_at_streams)
+ {
+ return;
+ }
throw std::runtime_error(
"attempt to make a stream into a direct object");
}
@@ -2690,7 +2696,8 @@ QPDFObjectHandle::copyObject(std::set<QPDFObjGen>& visited,
(cross_indirect || (! items.back().isIndirect())))
{
items.back().copyObject(
- visited, cross_indirect, first_level_only);
+ visited, cross_indirect,
+ first_level_only, stop_at_streams);
}
}
new_obj = new QPDF_Array(items);
@@ -2708,7 +2715,8 @@ QPDFObjectHandle::copyObject(std::set<QPDFObjGen>& visited,
(cross_indirect || (! items[*iter].isIndirect())))
{
items[*iter].copyObject(
- visited, cross_indirect, first_level_only);
+ visited, cross_indirect,
+ first_level_only, stop_at_streams);
}
}
new_obj = new QPDF_Dictionary(items);
@@ -2730,8 +2738,14 @@ QPDFObjectHandle::copyObject(std::set<QPDFObjGen>& visited,
void
QPDFObjectHandle::makeDirect()
{
+ makeDirect(false);
+}
+
+void
+QPDFObjectHandle::makeDirect(bool allow_streams)
+{
std::set<QPDFObjGen> visited;
- copyObject(visited, true, false);
+ copyObject(visited, true, false, allow_streams);
}
void