Commit 1957ad1e05ab2372358421ae4880fcbc7fcaf10f
1 parent
8335b283
Use QPDFObjGen::set in QPDFPageObjectHelper::getAttribute
Showing
1 changed file
with
9 additions
and
18 deletions
libqpdf/QPDFPageObjectHelper.cc
| @@ -246,32 +246,23 @@ QPDFPageObjectHelper::getAttribute( | @@ -246,32 +246,23 @@ QPDFPageObjectHelper::getAttribute( | ||
| 246 | std::function<QPDFObjectHandle()> get_fallback, | 246 | std::function<QPDFObjectHandle()> get_fallback, |
| 247 | bool copy_if_fallback) | 247 | bool copy_if_fallback) |
| 248 | { | 248 | { |
| 249 | - QPDFObjectHandle result; | ||
| 250 | - QPDFObjectHandle dict; | ||
| 251 | - bool is_form_xobject = this->oh.isFormXObject(); | 249 | + const bool is_form_xobject = this->oh.isFormXObject(); |
| 252 | bool inherited = false; | 250 | bool inherited = false; |
| 253 | - if (is_form_xobject) { | ||
| 254 | - dict = this->oh.getDict(); | ||
| 255 | - result = dict.getKey(name); | ||
| 256 | - } else { | ||
| 257 | - dict = this->oh; | ||
| 258 | - bool inheritable = | ||
| 259 | - ((name == "/MediaBox") || (name == "/CropBox") || | ||
| 260 | - (name == "/Resources") || (name == "/Rotate")); | 251 | + auto dict = is_form_xobject ? oh.getDict() : oh; |
| 252 | + auto result = dict.getKey(name); | ||
| 261 | 253 | ||
| 254 | + if (!is_form_xobject && result.isNull() && | ||
| 255 | + (name == "/MediaBox" || name == "/CropBox" || name == "/Resources" || | ||
| 256 | + name == "/Rotate")) { | ||
| 262 | QPDFObjectHandle node = dict; | 257 | QPDFObjectHandle node = dict; |
| 263 | - result = node.getKey(name); | ||
| 264 | - std::set<QPDFObjGen> seen; | ||
| 265 | - while (inheritable && result.isNull() && node.hasKey("/Parent")) { | ||
| 266 | - seen.insert(node.getObjGen()); | 258 | + QPDFObjGen::set seen{}; |
| 259 | + while (seen.add(node) && node.hasKey("/Parent")) { | ||
| 267 | node = node.getKey("/Parent"); | 260 | node = node.getKey("/Parent"); |
| 268 | - if (seen.count(node.getObjGen())) { | ||
| 269 | - break; | ||
| 270 | - } | ||
| 271 | result = node.getKey(name); | 261 | result = node.getKey(name); |
| 272 | if (!result.isNull()) { | 262 | if (!result.isNull()) { |
| 273 | QTC::TC("qpdf", "QPDFPageObjectHelper non-trivial inheritance"); | 263 | QTC::TC("qpdf", "QPDFPageObjectHelper non-trivial inheritance"); |
| 274 | inherited = true; | 264 | inherited = true; |
| 265 | + break; | ||
| 275 | } | 266 | } |
| 276 | } | 267 | } |
| 277 | } | 268 | } |