Commit 1957ad1e05ab2372358421ae4880fcbc7fcaf10f

Authored by m-holger
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 }
... ...