aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_Array.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDF_Array.cc')
-rw-r--r--libqpdf/QPDF_Array.cc14
1 files changed, 13 insertions, 1 deletions
diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc
index d7505468..320a1ab7 100644
--- a/libqpdf/QPDF_Array.cc
+++ b/libqpdf/QPDF_Array.cc
@@ -246,7 +246,19 @@ QPDF_Array::insert(int at, QPDFObjectHandle const& item)
} else {
checkOwnership(item);
if (sparse) {
- sp_elements.insert(at, item);
+ auto iter = sp_elements.elements.crbegin();
+ while (iter != sp_elements.elements.crend()) {
+ auto key = (iter++)->first;
+ if (key >= at) {
+ auto nh = sp_elements.elements.extract(key);
+ ++nh.key();
+ sp_elements.elements.insert(std::move(nh));
+ } else {
+ break;
+ }
+ }
+ sp_elements.elements[at] = item.getObj();
+ ++sp_elements.n_elements;
} else {
elements.insert(elements.cbegin() + at, item.getObj());
}