Commit c9a9fe9c2f8837bdfdd2b0e58fce9a82b0a64881

Authored by Jay Berkenbilt
1 parent 0b612755

Avoid traversing same object twice when copying objects

This is a performance fix.  The output is unchanged.

Fixes #28.
ChangeLog
  1 +2013-12-26 Jay Berkenbilt <ejb@ql.org>
  2 +
  3 + * Bug fix: when copying foreign objects (which occurs during page
  4 + splitting among other cases), avoid traversing the same object
  5 + more than once if it appears more than once in the same direct
  6 + object. This bug is performance-only and does not affect the
  7 + actual output.
  8 +
1 2013-12-17 Jay Berkenbilt <ejb@ql.org> 9 2013-12-17 Jay Berkenbilt <ejb@ql.org>
2 10
3 * 5.1.0: release 11 * 5.1.0: release
libqpdf/QPDF.cc
@@ -1755,6 +1755,11 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier&amp; obj_copier, @@ -1755,6 +1755,11 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier&amp; obj_copier,
1755 QTC::TC("qpdf", "QPDF loop reserving objects"); 1755 QTC::TC("qpdf", "QPDF loop reserving objects");
1756 return; 1756 return;
1757 } 1757 }
  1758 + if (obj_copier.object_map.find(foreign_og) != obj_copier.object_map.end())
  1759 + {
  1760 + QTC::TC("qpdf", "QPDF already reserved object");
  1761 + return;
  1762 + }
1758 QTC::TC("qpdf", "QPDF copy indirect"); 1763 QTC::TC("qpdf", "QPDF copy indirect");
1759 obj_copier.visiting.insert(foreign_og); 1764 obj_copier.visiting.insert(foreign_og);
1760 std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping = 1765 std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping =
qpdf/qpdf.testcov
@@ -268,3 +268,4 @@ QPDF xref space 2 @@ -268,3 +268,4 @@ QPDF xref space 2
268 qpdf pages range omitted at end 0 268 qpdf pages range omitted at end 0
269 qpdf pages range omitted in middle 0 269 qpdf pages range omitted in middle 0
270 qpdf npages 0 270 qpdf npages 0
  271 +QPDF already reserved object 0