Commit 8fbef47093e93cfdaffd62449a18b57679b610f5
1 parent
5473c095
Use QPDFObjGen::set in QPDF::getAllPages
Showing
2 changed files
with
9 additions
and
14 deletions
include/qpdf/QPDF.hh
| ... | ... | @@ -1252,8 +1252,8 @@ class QPDF |
| 1252 | 1252 | |
| 1253 | 1253 | void getAllPagesInternal( |
| 1254 | 1254 | QPDFObjectHandle cur_pages, |
| 1255 | - std::set<QPDFObjGen>& visited, | |
| 1256 | - std::set<QPDFObjGen>& seen); | |
| 1255 | + QPDFObjGen::set& visited, | |
| 1256 | + QPDFObjGen::set& seen); | |
| 1257 | 1257 | void insertPage(QPDFObjectHandle newpage, int pos); |
| 1258 | 1258 | void flattenPagesTree(); |
| 1259 | 1259 | void insertPageobjToPage( | ... | ... |
libqpdf/QPDF_pages.cc
| ... | ... | @@ -55,13 +55,13 @@ QPDF::getAllPages() |
| 55 | 55 | // initialize this->m->all_pages. |
| 56 | 56 | if (this->m->all_pages.empty()) { |
| 57 | 57 | this->m->ever_called_get_all_pages = true; |
| 58 | - std::set<QPDFObjGen> visited; | |
| 59 | - std::set<QPDFObjGen> seen; | |
| 58 | + QPDFObjGen::set visited; | |
| 59 | + QPDFObjGen::set seen; | |
| 60 | 60 | QPDFObjectHandle pages = getRoot().getKey("/Pages"); |
| 61 | 61 | bool warned = false; |
| 62 | 62 | bool changed_pages = false; |
| 63 | 63 | while (pages.isDictionary() && pages.hasKey("/Parent")) { |
| 64 | - if (seen.count(pages.getObjGen())) { | |
| 64 | + if (!seen.add(pages)) { | |
| 65 | 65 | // loop -- will be detected again and reported later |
| 66 | 66 | break; |
| 67 | 67 | } |
| ... | ... | @@ -74,7 +74,6 @@ QPDF::getAllPages() |
| 74 | 74 | " to the root of the page tree; attempting to correct"); |
| 75 | 75 | warned = true; |
| 76 | 76 | } |
| 77 | - seen.insert(pages.getObjGen()); | |
| 78 | 77 | changed_pages = true; |
| 79 | 78 | pages = pages.getKey("/Parent"); |
| 80 | 79 | } |
| ... | ... | @@ -92,12 +91,9 @@ QPDF::getAllPages() |
| 92 | 91 | |
| 93 | 92 | void |
| 94 | 93 | QPDF::getAllPagesInternal( |
| 95 | - QPDFObjectHandle cur_node, | |
| 96 | - std::set<QPDFObjGen>& visited, | |
| 97 | - std::set<QPDFObjGen>& seen) | |
| 94 | + QPDFObjectHandle cur_node, QPDFObjGen::set& visited, QPDFObjGen::set& seen) | |
| 98 | 95 | { |
| 99 | - QPDFObjGen cur_node_og = cur_node.getObjGen(); | |
| 100 | - if (visited.count(cur_node_og) > 0) { | |
| 96 | + if (!visited.add(cur_node)) { | |
| 101 | 97 | throw QPDFExc( |
| 102 | 98 | qpdf_e_pages, |
| 103 | 99 | this->m->file->getName(), |
| ... | ... | @@ -105,7 +101,6 @@ QPDF::getAllPagesInternal( |
| 105 | 101 | 0, |
| 106 | 102 | "Loop detected in /Pages structure (getAllPages)"); |
| 107 | 103 | } |
| 108 | - visited.insert(cur_node_og); | |
| 109 | 104 | if (!cur_node.isDictionaryOfType("/Pages")) { |
| 110 | 105 | cur_node.warnIfPossible( |
| 111 | 106 | "/Type key should be /Pages but is not; overriding"); |
| ... | ... | @@ -125,7 +120,7 @@ QPDF::getAllPagesInternal( |
| 125 | 120 | " (from 0) is direct; converting to indirect"); |
| 126 | 121 | kid = makeIndirectObject(kid); |
| 127 | 122 | kids.setArrayItem(i, kid); |
| 128 | - } else if (seen.count(kid.getObjGen())) { | |
| 123 | + } else if (!seen.add(kid)) { | |
| 129 | 124 | // Make a copy of the page. This does the same as |
| 130 | 125 | // shallowCopyPage in QPDFPageObjectHelper. |
| 131 | 126 | QTC::TC("qpdf", "QPDF resolve duplicated page object"); |
| ... | ... | @@ -134,6 +129,7 @@ QPDF::getAllPagesInternal( |
| 134 | 129 | " (from 0) appears more than once in the pages tree;" |
| 135 | 130 | " creating a new page object as a copy"); |
| 136 | 131 | kid = makeIndirectObject(QPDFObjectHandle(kid).shallowCopy()); |
| 132 | + seen.add(kid); | |
| 137 | 133 | kids.setArrayItem(i, kid); |
| 138 | 134 | } |
| 139 | 135 | if (!kid.isDictionaryOfType("/Page")) { |
| ... | ... | @@ -141,7 +137,6 @@ QPDF::getAllPagesInternal( |
| 141 | 137 | "/Type key should be /Page but is not; overriding"); |
| 142 | 138 | kid.replaceKey("/Type", "/Page"_qpdf); |
| 143 | 139 | } |
| 144 | - seen.insert(kid.getObjGen()); | |
| 145 | 140 | m->all_pages.push_back(kid); |
| 146 | 141 | } |
| 147 | 142 | } | ... | ... |