summaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-01-05 16:36:29 +0100
committerm-holger <m-holger@kubitscheck.org>2023-05-19 19:49:33 +0200
commit1957ad1e05ab2372358421ae4880fcbc7fcaf10f (patch)
tree509cfc33842db18baefb80c6a699d88ad4af2615 /libqpdf
parent8335b2833b22418742e85eaa77c4269447afac63 (diff)
downloadqpdf-1957ad1e05ab2372358421ae4880fcbc7fcaf10f.tar.zst
Use QPDFObjGen::set in QPDFPageObjectHelper::getAttribute
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFPageObjectHelper.cc27
1 files changed, 9 insertions, 18 deletions
diff --git a/libqpdf/QPDFPageObjectHelper.cc b/libqpdf/QPDFPageObjectHelper.cc
index 089b62c5..a2deb386 100644
--- a/libqpdf/QPDFPageObjectHelper.cc
+++ b/libqpdf/QPDFPageObjectHelper.cc
@@ -246,32 +246,23 @@ QPDFPageObjectHelper::getAttribute(
std::function<QPDFObjectHandle()> get_fallback,
bool copy_if_fallback)
{
- QPDFObjectHandle result;
- QPDFObjectHandle dict;
- bool is_form_xobject = this->oh.isFormXObject();
+ const bool is_form_xobject = this->oh.isFormXObject();
bool inherited = false;
- if (is_form_xobject) {
- dict = this->oh.getDict();
- result = dict.getKey(name);
- } else {
- dict = this->oh;
- bool inheritable =
- ((name == "/MediaBox") || (name == "/CropBox") ||
- (name == "/Resources") || (name == "/Rotate"));
+ auto dict = is_form_xobject ? oh.getDict() : oh;
+ auto result = dict.getKey(name);
+ if (!is_form_xobject && result.isNull() &&
+ (name == "/MediaBox" || name == "/CropBox" || name == "/Resources" ||
+ name == "/Rotate")) {
QPDFObjectHandle node = dict;
- result = node.getKey(name);
- std::set<QPDFObjGen> seen;
- while (inheritable && result.isNull() && node.hasKey("/Parent")) {
- seen.insert(node.getObjGen());
+ QPDFObjGen::set seen{};
+ while (seen.add(node) && node.hasKey("/Parent")) {
node = node.getKey("/Parent");
- if (seen.count(node.getObjGen())) {
- break;
- }
result = node.getKey(name);
if (!result.isNull()) {
QTC::TC("qpdf", "QPDFPageObjectHelper non-trivial inheritance");
inherited = true;
+ break;
}
}
}