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,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 }