diff options
Diffstat (limited to 'libqpdf/QPDF_Array.cc')
-rw-r--r-- | libqpdf/QPDF_Array.cc | 14 |
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()); } |