aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-04-16 19:12:49 +0200
committerJay Berkenbilt <ejb@ql.org>2022-04-16 19:13:15 +0200
commit80ed3076a02a40175760f8ddf88bbee2e1604d23 (patch)
tree746cec95d3eb70ea0b72269c23b7ef78ad318519
parent496ca2e4dca0d752823972e058e4885ec3b9004e (diff)
downloadqpdf-80ed3076a02a40175760f8ddf88bbee2e1604d23.tar.zst
Remove deprecated name/number tree constructors
Remove the name/number tree object helper constructors that don't take a QPDF&.
-rw-r--r--TODO4
-rw-r--r--include/qpdf/QPDFNameTreeObjectHelper.hh9
-rw-r--r--include/qpdf/QPDFNumberTreeObjectHelper.hh9
-rw-r--r--libqpdf/NNTree.cc51
-rw-r--r--libqpdf/QPDFNameTreeObjectHelper.cc10
-rw-r--r--libqpdf/QPDFNumberTreeObjectHelper.cc10
-rw-r--r--libqpdf/qpdf/NNTree.hh5
-rw-r--r--manual/release-notes.rst4
-rw-r--r--qpdf/qtest/qpdf/name-tree.out2
-rw-r--r--qpdf/qtest/qpdf/number-tree.out1
-rw-r--r--qpdf/test_driver.cc39
11 files changed, 31 insertions, 113 deletions
diff --git a/TODO b/TODO
index 6fe07fef..68447795 100644
--- a/TODO
+++ b/TODO
@@ -481,10 +481,6 @@ Comments appear in the code prefixed by "ABI"
* Search for ABI to find items not listed here.
* See where anonymous namespaces can be used to keep things private to
a source file. Search for `(class|struct)` in **/*.cc.
-* After removing legacy QPDFNameTreeObjectHelper and
- QPDFNumberTreeObjectHelper constructors, NNTreeImpl can switch to
- having a QPDF reference and assume that the reference is always
- valid.
* Having QPDFObjectHandle setters return Class& to allow for
use of fluent interfaces. This includes array and dictionary
mutators.
diff --git a/include/qpdf/QPDFNameTreeObjectHelper.hh b/include/qpdf/QPDFNameTreeObjectHelper.hh
index 194fc926..7093ca2e 100644
--- a/include/qpdf/QPDFNameTreeObjectHelper.hh
+++ b/include/qpdf/QPDFNameTreeObjectHelper.hh
@@ -50,13 +50,6 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
QPDF_DLL
QPDFNameTreeObjectHelper(QPDFObjectHandle, QPDF&, bool auto_repair = true);
- // ABI: Legacy Constructor will be removed in QPDF 11. A
- // QPDFNameTreeObjectHelper constructed in this way can't be
- // modified or repaired and will silently ignore problems in the
- // structure.
- [[deprecated("use constructor that takes QPDF&")]] QPDF_DLL
- QPDFNameTreeObjectHelper(QPDFObjectHandle);
-
// Create an empty name tree
QPDF_DLL
static QPDFNameTreeObjectHelper newEmpty(QPDF&, bool auto_repair = true);
@@ -197,7 +190,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
~Members() = default;
private:
- Members(QPDFObjectHandle& oh, QPDF*, bool auto_repair);
+ Members(QPDFObjectHandle& oh, QPDF&, bool auto_repair);
Members(Members const&) = delete;
std::shared_ptr<NNTreeImpl> impl;
diff --git a/include/qpdf/QPDFNumberTreeObjectHelper.hh b/include/qpdf/QPDFNumberTreeObjectHelper.hh
index 4dbef98a..b053b5f4 100644
--- a/include/qpdf/QPDFNumberTreeObjectHelper.hh
+++ b/include/qpdf/QPDFNumberTreeObjectHelper.hh
@@ -48,13 +48,6 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
QPDFNumberTreeObjectHelper(
QPDFObjectHandle, QPDF&, bool auto_repair = true);
- // ABI: Legacy Constructor will be removed in QPDF 11. A
- // QPDFNumberTreeObjectHelper constructed in this way can't be
- // modified or repaired and will silently ignore problems in the
- // structure.
- [[deprecated("use constructor that takes QPDF&")]] QPDF_DLL
- QPDFNumberTreeObjectHelper(QPDFObjectHandle);
-
QPDF_DLL
virtual ~QPDFNumberTreeObjectHelper() = default;
@@ -217,7 +210,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
~Members() = default;
private:
- Members(QPDFObjectHandle& oh, QPDF*, bool auto_repair);
+ Members(QPDFObjectHandle& oh, QPDF&, bool auto_repair);
Members(Members const&) = delete;
std::shared_ptr<NNTreeImpl> impl;
diff --git a/libqpdf/NNTree.cc b/libqpdf/NNTree.cc
index 8c6b4bab..985a3cb2 100644
--- a/libqpdf/NNTree.cc
+++ b/libqpdf/NNTree.cc
@@ -16,37 +16,23 @@ get_description(QPDFObjectHandle& node)
}
static void
-warn(QPDF* qpdf, QPDFObjectHandle& node, std::string const& msg)
+warn(QPDF& qpdf, QPDFObjectHandle& node, std::string const& msg)
{
- // ABI: in qpdf 11, change to a reference.
-
- if (qpdf) {
- qpdf->warn(
- // line-break
- QPDFExc(
- qpdf_e_damaged_pdf,
- qpdf->getFilename(),
- get_description(node),
- 0,
- msg));
- }
+ qpdf.warn(
+ // line-break
+ QPDFExc(
+ qpdf_e_damaged_pdf,
+ qpdf.getFilename(),
+ get_description(node),
+ 0,
+ msg));
}
static void
-error(QPDF* qpdf, QPDFObjectHandle& node, std::string const& msg)
+error(QPDF& qpdf, QPDFObjectHandle& node, std::string const& msg)
{
- // ABI: in qpdf 11, change to a reference.
-
- if (qpdf) {
- throw QPDFExc(
- qpdf_e_damaged_pdf,
- qpdf->getFilename(),
- get_description(node),
- 0,
- msg);
- } else {
- throw std::runtime_error(get_description(node) + ": " + msg);
- }
+ throw QPDFExc(
+ qpdf_e_damaged_pdf, qpdf.getFilename(), get_description(node), 0, msg);
}
NNTreeIterator::NNTreeIterator(NNTreeImpl& impl) :
@@ -293,9 +279,6 @@ NNTreeIterator::split(
// node: A
// item_number: 0
- if (!this->impl.qpdf) {
- throw std::logic_error("NNTreeIterator::split called with null qpdf");
- }
if (!valid()) {
throw std::logic_error(
"NNTreeIterator::split called an invalid iterator");
@@ -361,7 +344,7 @@ NNTreeIterator::split(
// same way.
auto first_node =
- impl.qpdf->makeIndirectObject(QPDFObjectHandle::newDictionary());
+ impl.qpdf.makeIndirectObject(QPDFObjectHandle::newDictionary());
first_node.replaceKey(key, first_half);
QPDFObjectHandle new_kids = QPDFObjectHandle::newArray();
new_kids.appendItem(first_node);
@@ -397,7 +380,7 @@ NNTreeIterator::split(
// Create a new node to contain the second half
QPDFObjectHandle second_node =
- impl.qpdf->makeIndirectObject(QPDFObjectHandle::newDictionary());
+ impl.qpdf.makeIndirectObject(QPDFObjectHandle::newDictionary());
second_node.replaceKey(key, second_half);
resetLimits(second_node, parent);
@@ -705,7 +688,7 @@ NNTreeIterator::deepen(QPDFObjectHandle node, bool first, bool allow_empty)
addPathElement(node, kid_number);
auto next = kids.getArrayItem(kid_number);
if (!next.isIndirect()) {
- if (impl.qpdf && impl.auto_repair) {
+ if (impl.auto_repair) {
QTC::TC("qpdf", "NNTree fix indirect kid");
warn(
impl.qpdf,
@@ -713,7 +696,7 @@ NNTreeIterator::deepen(QPDFObjectHandle node, bool first, bool allow_empty)
("converting kid number " +
QUtil::int_to_string(kid_number) +
" to an indirect object"));
- next = impl.qpdf->makeIndirectObject(next);
+ next = impl.qpdf.makeIndirectObject(next);
kids.setArrayItem(kid_number, next);
} else {
QTC::TC("qpdf", "NNTree warn indirect kid");
@@ -749,7 +732,7 @@ NNTreeIterator::deepen(QPDFObjectHandle node, bool first, bool allow_empty)
NNTreeImpl::NNTreeImpl(
NNTreeDetails const& details,
- QPDF* qpdf,
+ QPDF& qpdf,
QPDFObjectHandle& oh,
bool auto_repair) :
details(details),
diff --git a/libqpdf/QPDFNameTreeObjectHelper.cc b/libqpdf/QPDFNameTreeObjectHelper.cc
index 19dac3e4..e079c844 100644
--- a/libqpdf/QPDFNameTreeObjectHelper.cc
+++ b/libqpdf/QPDFNameTreeObjectHelper.cc
@@ -32,7 +32,7 @@ class NameTreeDetails: public NNTreeDetails
static NameTreeDetails name_tree_details;
QPDFNameTreeObjectHelper::Members::Members(
- QPDFObjectHandle& oh, QPDF* q, bool auto_repair) :
+ QPDFObjectHandle& oh, QPDF& q, bool auto_repair) :
impl(std::make_shared<NNTreeImpl>(name_tree_details, q, oh, auto_repair))
{
}
@@ -40,13 +40,7 @@ QPDFNameTreeObjectHelper::Members::Members(
QPDFNameTreeObjectHelper::QPDFNameTreeObjectHelper(
QPDFObjectHandle oh, QPDF& q, bool auto_repair) :
QPDFObjectHelper(oh),
- m(new Members(oh, &q, auto_repair))
-{
-}
-
-QPDFNameTreeObjectHelper::QPDFNameTreeObjectHelper(QPDFObjectHandle oh) :
- QPDFObjectHelper(oh),
- m(new Members(oh, nullptr, false))
+ m(new Members(oh, q, auto_repair))
{
}
diff --git a/libqpdf/QPDFNumberTreeObjectHelper.cc b/libqpdf/QPDFNumberTreeObjectHelper.cc
index 22b7f903..71cb039e 100644
--- a/libqpdf/QPDFNumberTreeObjectHelper.cc
+++ b/libqpdf/QPDFNumberTreeObjectHelper.cc
@@ -33,7 +33,7 @@ class NumberTreeDetails: public NNTreeDetails
static NumberTreeDetails number_tree_details;
QPDFNumberTreeObjectHelper::Members::Members(
- QPDFObjectHandle& oh, QPDF* q, bool auto_repair) :
+ QPDFObjectHandle& oh, QPDF& q, bool auto_repair) :
impl(std::make_shared<NNTreeImpl>(number_tree_details, q, oh, auto_repair))
{
}
@@ -41,13 +41,7 @@ QPDFNumberTreeObjectHelper::Members::Members(
QPDFNumberTreeObjectHelper::QPDFNumberTreeObjectHelper(
QPDFObjectHandle oh, QPDF& q, bool auto_repair) :
QPDFObjectHelper(oh),
- m(new Members(oh, &q, auto_repair))
-{
-}
-
-QPDFNumberTreeObjectHelper::QPDFNumberTreeObjectHelper(QPDFObjectHandle oh) :
- QPDFObjectHelper(oh),
- m(new Members(oh, nullptr, false))
+ m(new Members(oh, q, auto_repair))
{
}
diff --git a/libqpdf/qpdf/NNTree.hh b/libqpdf/qpdf/NNTree.hh
index 6ee2ee07..09ce3313 100644
--- a/libqpdf/qpdf/NNTree.hh
+++ b/libqpdf/qpdf/NNTree.hh
@@ -97,10 +97,9 @@ class NNTreeImpl
public:
typedef NNTreeIterator iterator;
- // ABI: for qpdf 11, make qpdf a reference
NNTreeImpl(
NNTreeDetails const&,
- QPDF*,
+ QPDF&,
QPDFObjectHandle&,
bool auto_repair = true);
iterator begin();
@@ -132,7 +131,7 @@ class NNTreeImpl
int compareKeyKid(QPDFObjectHandle& key, QPDFObjectHandle& items, int idx);
NNTreeDetails const& details;
- QPDF* qpdf;
+ QPDF& qpdf;
int split_threshold;
QPDFObjectHandle oh;
bool auto_repair;
diff --git a/manual/release-notes.rst b/manual/release-notes.rst
index c48fd15a..d6ef1c9b 100644
--- a/manual/release-notes.rst
+++ b/manual/release-notes.rst
@@ -69,6 +69,10 @@ For a detailed list of changes, please see the file
method never worked and only did something in qpdf version
10.2.x.
+ - Remove ``QPDFNameTreeObjectHelper`` and
+ ``QPDFNumberTreeObjectHelper`` constructors that don't take a
+ ``QPDF&`` argument.
+
- Other changes
- A new chapter on contributing to qpdf has been added to the
diff --git a/qpdf/qtest/qpdf/name-tree.out b/qpdf/qtest/qpdf/name-tree.out
index 377d3ab5..6e1c90d6 100644
--- a/qpdf/qtest/qpdf/name-tree.out
+++ b/qpdf/qtest/qpdf/name-tree.out
@@ -21,8 +21,6 @@ insertAfter
4 (4!)
/Empty1
/Empty2
-/Bad1: deprecated API
-Name/Number tree node (object 16): item at index 2 is not the right type
/Bad1 -- wrong key type
WARNING: name-tree.pdf (Name/Number tree node (object 16)): attempting to repair after error: name-tree.pdf (Name/Number tree node (object 16)): item at index 2 is not the right type
WARNING: name-tree.pdf (Name/Number tree node (object 16)): item 2 has the wrong type
diff --git a/qpdf/qtest/qpdf/number-tree.out b/qpdf/qtest/qpdf/number-tree.out
index d1ad8302..7a333608 100644
--- a/qpdf/qtest/qpdf/number-tree.out
+++ b/qpdf/qtest/qpdf/number-tree.out
@@ -29,7 +29,6 @@
insertAfter
3 (3!)
4 (4!)
-/Bad1: deprecated API
/Bad1
WARNING: number-tree.pdf (Name/Number tree node (object 14)): name/number tree node has neither non-empty /Nums nor /Kids
WARNING: number-tree.pdf (Name/Number tree node (object 13)): loop detected while traversing name/number tree
diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc
index bacaca74..da2a5e7f 100644
--- a/qpdf/test_driver.cc
+++ b/qpdf/test_driver.cc
@@ -1733,23 +1733,8 @@ test_46(QPDF& pdf, char const* arg2)
std::cout << i.first << " " << i.second.unparse() << std::endl;
}
- // Exercise deprecated API until qpdf 11
- std::cout << "/Bad1: deprecated API" << std::endl;
-#ifdef _MSC_VER
-# pragma warning(disable : 4996)
-#endif
-#if (defined(__GNUC__) || defined(__clang__))
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
- auto bad1 = QPDFNumberTreeObjectHelper(pdf.getTrailer().getKey("/Bad1"));
-#if (defined(__GNUC__) || defined(__clang__))
-# pragma GCC diagnostic pop
-#endif
- assert(bad1.begin() == bad1.end());
-
std::cout << "/Bad1" << std::endl;
- bad1 = QPDFNumberTreeObjectHelper(pdf.getTrailer().getKey("/Bad1"), pdf);
+ auto bad1 = QPDFNumberTreeObjectHelper(pdf.getTrailer().getKey("/Bad1"), pdf);
assert(bad1.begin() == bad1.end());
assert(bad1.last() == bad1.end());
@@ -1931,28 +1916,8 @@ test_48(QPDF& pdf, char const* arg2)
assert(empty.last()->second.getStringValue() == "6");
}
- // Exercise deprecated API until qpdf 11
- std::cout << "/Bad1: deprecated API" << std::endl;
-#ifdef _MSC_VER
-# pragma warning(disable : 4996)
-#endif
-#if (defined(__GNUC__) || defined(__clang__))
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
- auto bad1 = QPDFNameTreeObjectHelper(pdf.getTrailer().getKey("/Bad1"));
-#if (defined(__GNUC__) || defined(__clang__))
-# pragma GCC diagnostic pop
-#endif
- try {
- bad1.find("G", true);
- assert(false);
- } catch (std::runtime_error& e) {
- std::cout << e.what() << std::endl;
- }
-
std::cout << "/Bad1 -- wrong key type" << std::endl;
- bad1 = QPDFNameTreeObjectHelper(pdf.getTrailer().getKey("/Bad1"), pdf);
+ auto bad1 = QPDFNameTreeObjectHelper(pdf.getTrailer().getKey("/Bad1"), pdf);
assert(bad1.find("G", true)->first == "A");
for (auto const& i : bad1) {
std::cout << i.first << std::endl;