From b1d5a928b589140f430e11e016de3648a2920866 Mon Sep 17 00:00:00 2001 From: m-holger Date: Tue, 19 Aug 2025 10:00:15 +0100 Subject: [PATCH] Refactor `Array::setAt` to `Array::set`, update method signatures for consistency, modify bounds checks, and adjust affected tests. --- libqpdf/QPDF_Array.cc | 21 ++++++++++++++------- libqpdf/qpdf/QPDFObjectHandle_private.hh | 3 ++- libtests/sparse_array.cc | 12 ++++++------ qpdf/qpdf.testcov | 2 -- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc index c70e158..18bec61 100644 --- a/libqpdf/QPDF_Array.cc +++ b/libqpdf/QPDF_Array.cc @@ -248,21 +248,30 @@ Array::getAsVector() const } bool -Array::setAt(int at, QPDFObjectHandle const& oh) +Array::set(size_t at, QPDFObjectHandle const& oh) { - if (at < 0 || std::cmp_greater_equal(at, size())) { + if (at >= size()) { return false; } auto a = array(); checkOwnership(oh); if (a->sp) { - a->sp->elements[to_s(at)] = oh; + a->sp->elements[at] = oh; } else { - a->elements[to_s(at)] = oh; + a->elements[at] = oh; } return true; } +bool +Array::set(int at, QPDFObjectHandle const& oh) +{ + if (at < 0) { + return false; + } + return set(to_s(at), oh); +} + void Array::setFromVector(std::vector const& v) { @@ -463,13 +472,11 @@ void QPDFObjectHandle::setArrayItem(int n, QPDFObjectHandle const& item) { if (auto array = as_array(strict)) { - if (!array.setAt(n, item)) { + if (!array.set(n, item)) { objectWarning("ignoring attempt to set out of bounds array item"); - QTC::TC("qpdf", "QPDFObjectHandle set array bounds"); } } else { typeWarning("array", "ignoring attempt to set item"); - QTC::TC("qpdf", "QPDFObjectHandle array ignoring set item"); } } void diff --git a/libqpdf/qpdf/QPDFObjectHandle_private.hh b/libqpdf/qpdf/QPDFObjectHandle_private.hh index 5a8a348..2f9da1e 100644 --- a/libqpdf/qpdf/QPDFObjectHandle_private.hh +++ b/libqpdf/qpdf/QPDFObjectHandle_private.hh @@ -94,7 +94,8 @@ namespace qpdf size_t size() const; QPDFObjectHandle get(size_t n) const; QPDFObjectHandle get(int n) const; - bool setAt(int at, QPDFObjectHandle const& oh); + bool set(size_t at, QPDFObjectHandle const& oh); + bool set(int at, QPDFObjectHandle const& oh); bool insert(int at, QPDFObjectHandle const& item); void push_back(QPDFObjectHandle const& item); bool erase(int at); diff --git a/libtests/sparse_array.cc b/libtests/sparse_array.cc index 9dffd7f..261b982 100644 --- a/libtests/sparse_array.cc +++ b/libtests/sparse_array.cc @@ -66,9 +66,9 @@ main() assert(a[4].isNull()); assert(a[5].isNull()); - a.setAt(4, QPDFObjectHandle::parse("12")); + a.set(4, QPDFObjectHandle::parse("12")); assert(a[4].isInteger() && (a[4].getIntValue() == 12)); - a.setAt(4, QPDFObjectHandle::newNull()); + a.set(4, QPDFObjectHandle::newNull()); assert(a[4].isNull()); a.erase(to_i(a.size()) - 1); @@ -96,8 +96,8 @@ main() obj = QPDFObject::create( std::vector{10, "null"_qpdf.getObj()}, true); auto b = qpdf::Array(obj); - b.setAt(5, pdf.newIndirectNull()); - b.setAt(7, "[0 1 2 3]"_qpdf); + b.set(5, pdf.newIndirectNull()); + b.set(7, "[0 1 2 3]"_qpdf); assert(b[3].null()); assert(b[8].null()); assert(b[5].indirect()); @@ -111,7 +111,7 @@ main() assert(d.unparse() == "[ null null null null null 3 0 R null [ 0 1 2 3 ] null null ]"); try { - b.setAt(3, {}); + b.set(3, {}); std::cout << "inserted uninitialized object\n"; } catch (std::logic_error&) { } @@ -119,7 +119,7 @@ main() pdf2.emptyPDF(); try { pdf.makeIndirectObject(obj); - b.setAt(3, pdf2.getObject(1, 0)); + b.set(3, pdf2.getObject(1, 0)); std::cout << "inserted uninitialized object\n"; } catch (std::logic_error&) { } diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index 5fc0d91..7898bf9 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -298,8 +298,6 @@ QPDFObjectHandle string returning empty utf8 0 QPDFObjectHandle operator returning fake value 0 QPDFObjectHandle inlineimage returning empty data 0 QPDFObjectHandle array treating as empty vector 0 -QPDFObjectHandle array ignoring set item 0 -QPDFObjectHandle set array bounds 0 QPDFObjectHandle array ignoring replace items 0 QPDFObjectHandle array ignoring insert item 0 QPDFObjectHandle insert array bounds 0 -- libgit2 0.21.4