diff options
author | Albert Astals Cid <aacid@kde.org> | 2020-09-16 00:04:01 +0200 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2020-09-16 00:04:01 +0200 |
commit | eb7940e737633c17696aec78ecad92048d6163e5 (patch) | |
tree | 027039a23eea90f452534bb887ab4ee54a0cc176 | |
parent | 56cf80b2c53fa61d29b4718df092248a062c61e0 (diff) |
Filter out repeated forms
Some files like the one from KDE bug 426467 has the same signature
repeated 23 times in the Fields field, just return it one
-rw-r--r-- | poppler/Form.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/poppler/Form.cc b/poppler/Form.cc index b7ffc196..2ea343dd 100644 --- a/poppler/Form.cc +++ b/poppler/Form.cc @@ -2005,6 +2005,7 @@ Form::Form(PDFDoc *docA, Object *acroFormA) obj1 = acroForm->dictLookup("Fields"); if (obj1.isArray()) { Array *array = obj1.getArray(); + std::set<Ref> alreadyReadRefs; for (int i = 0; i < array->getLength(); i++) { Object obj2 = array->get(i); const Object &oref = array->getNF(i); @@ -2018,6 +2019,11 @@ Form::Form(PDFDoc *docA, Object *acroFormA) continue; } + if (alreadyReadRefs.find(oref.getRef()) != alreadyReadRefs.end()) { + continue; + } + alreadyReadRefs.insert(oref.getRef()); + if (numFields >= size) { size += 16; rootFields = (FormField **)greallocn(rootFields, size, sizeof(FormField *)); |