aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-11-15 13:00:51 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2022-11-20 18:07:22 +0100
commit4325e6e4a79da854157c1ef3b95fe2c925f68194 (patch)
tree843d069377e47bbef53adaddbfc478c3f1dc24bf
parent585ecf17c87d86c6fb07ebbbef703a8a859680f2 (diff)
downloadqpdf-4325e6e4a79da854157c1ef3b95fe2c925f68194.tar.zst
Refactor QPDFObjectHandle::copyObject and rename to makeDirect
-rw-r--r--include/qpdf/QPDFObjectHandle.hh2
-rw-r--r--libqpdf/QPDFObjectHandle.cc42
2 files changed, 18 insertions, 26 deletions
diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh
index ba58fcf3..f8bcb055 100644
--- a/include/qpdf/QPDFObjectHandle.hh
+++ b/include/qpdf/QPDFObjectHandle.hh
@@ -1628,7 +1628,7 @@ class QPDFObjectHandle
void objectWarning(std::string const& warning);
void assertType(char const* type_name, bool istype);
bool dereference();
- void copyObject(std::set<QPDFObjGen>& visited, bool stop_at_streams);
+ void makeDirect(std::set<QPDFObjGen>& visited, bool stop_at_streams);
void disconnect();
void setParsedOffset(qpdf_offset_t offset);
void parseContentStream_internal(
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index 3362d5e6..70305779 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -2218,19 +2218,10 @@ QPDFObjectHandle::unsafeShallowCopy()
}
void
-QPDFObjectHandle::copyObject(
+QPDFObjectHandle::makeDirect(
std::set<QPDFObjGen>& visited, bool stop_at_streams)
{
assertInitialized();
- if (isStream()) {
- 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");
- }
auto cur_og = getObjGen();
if (cur_og.getObj() != 0) {
@@ -2243,40 +2234,41 @@ QPDFObjectHandle::copyObject(
visited.insert(cur_og);
}
- if (isReserved()) {
- throw std::logic_error("QPDFObjectHandle: attempting to make a"
- " reserved object handle direct");
- }
-
- std::shared_ptr<QPDFObject> new_obj;
-
if (isBool() || isInteger() || isName() || isNull() || isReal() ||
isString()) {
- new_obj = obj->copy(true);
+ this->obj = obj->copy(true);
} else if (isArray()) {
std::vector<QPDFObjectHandle> items;
auto array = asArray();
int n = array->getNItems();
for (int i = 0; i < n; ++i) {
items.push_back(array->getItem(i));
- items.back().copyObject(visited, stop_at_streams);
+ items.back().makeDirect(visited, stop_at_streams);
}
- new_obj = QPDF_Array::create(items);
+ this->obj = QPDF_Array::create(items);
} else if (isDictionary()) {
std::map<std::string, QPDFObjectHandle> items;
auto dict = asDictionary();
for (auto const& key: getKeys()) {
items[key] = dict->getKey(key);
- items[key].copyObject(visited, stop_at_streams);
+ items[key].makeDirect(visited, stop_at_streams);
}
- new_obj = QPDF_Dictionary::create(items);
+ this->obj = QPDF_Dictionary::create(items);
+ } else if (isStream()) {
+ QTC::TC(
+ "qpdf", "QPDFObjectHandle copy stream", stop_at_streams ? 0 : 1);
+ if (!stop_at_streams) {
+ throw std::runtime_error(
+ "attempt to make a stream into a direct object");
+ }
+ } else if (isReserved()) {
+ throw std::logic_error("QPDFObjectHandle: attempting to make a"
+ " reserved object handle direct");
} else {
throw std::logic_error("QPDFObjectHandle::makeDirectInternal: "
"unknown object type");
}
- this->obj = new_obj;
-
if (cur_og.getObj()) {
visited.erase(cur_og);
}
@@ -2304,7 +2296,7 @@ void
QPDFObjectHandle::makeDirect(bool allow_streams)
{
std::set<QPDFObjGen> visited;
- copyObject(visited, allow_streams);
+ makeDirect(visited, allow_streams);
}
void