summaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDF_Array.cc20
-rw-r--r--libqpdf/qpdf/QPDF_Array.hh3
2 files changed, 23 insertions, 0 deletions
diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc
index e9d216a5..def40e9b 100644
--- a/libqpdf/QPDF_Array.cc
+++ b/libqpdf/QPDF_Array.cc
@@ -7,6 +7,26 @@
static const QPDFObjectHandle null_oh = QPDFObjectHandle::newNull();
+inline void
+QPDF_Array::checkOwnership(QPDFObjectHandle const& item) const
+{
+ if (auto obj = item.getObjectPtr()) {
+ if (qpdf) {
+ if (auto item_qpdf = obj->getQPDF()) {
+ if (qpdf != item_qpdf) {
+ throw std::logic_error(
+ "Attempting to add an object from a different QPDF. "
+ "Use QPDF::copyForeignObject to add objects from "
+ "another file.");
+ }
+ }
+ }
+ } else {
+ throw std::logic_error(
+ "Attempting to add an uninitialized object to a QPDF_Array.");
+ }
+}
+
QPDF_Array::QPDF_Array(std::vector<QPDFObjectHandle> const& v) :
QPDFValue(::ot_array, "array")
{
diff --git a/libqpdf/qpdf/QPDF_Array.hh b/libqpdf/qpdf/QPDF_Array.hh
index 4947d09c..b27ce122 100644
--- a/libqpdf/qpdf/QPDF_Array.hh
+++ b/libqpdf/qpdf/QPDF_Array.hh
@@ -42,6 +42,9 @@ class QPDF_Array: public QPDFValue
QPDF_Array(std::vector<std::shared_ptr<QPDFObject>>&& items, bool sparse);
QPDF_Array(SparseOHArray const& items);
QPDF_Array(std::vector<std::shared_ptr<QPDFObject>> const& items);
+
+ void checkOwnership(QPDFObjectHandle const& item) const;
+
bool sparse{false};
SparseOHArray sp_elements;
std::vector<std::shared_ptr<QPDFObject>> elements;