diff options
-rw-r--r-- | libqpdf/QPDF_Array.cc | 20 | ||||
-rw-r--r-- | libqpdf/qpdf/QPDF_Array.hh | 3 |
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; |