summaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
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;
}
}
}