summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2020-09-16 00:04:01 +0200
committerAlbert Astals Cid <aacid@kde.org>2020-09-16 00:04:01 +0200
commiteb7940e737633c17696aec78ecad92048d6163e5 (patch)
tree027039a23eea90f452534bb887ab4ee54a0cc176
parent56cf80b2c53fa61d29b4718df092248a062c61e0 (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.cc6
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 *));