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 | 246 | std::function<QPDFObjectHandle()> get_fallback, |
| 247 | 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 | 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 | 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 | 260 | node = node.getKey("/Parent"); |
| 268 | - if (seen.count(node.getObjGen())) { | |
| 269 | - break; | |
| 270 | - } | |
| 271 | 261 | result = node.getKey(name); |
| 272 | 262 | if (!result.isNull()) { |
| 273 | 263 | QTC::TC("qpdf", "QPDFPageObjectHelper non-trivial inheritance"); |
| 274 | 264 | inherited = true; |
| 265 | + break; | |
| 275 | 266 | } |
| 276 | 267 | } |
| 277 | 268 | } | ... | ... |