From d23f682901f0482bf9ac344ceae91d246ce4b3f7 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Tue, 15 Sep 2026 15:49:26 +0300 Subject: [PATCH] Fix infinite loop in getisArtifact method --- .../org/verapdf/gf/model/impl/pd/GFPDAnnot.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/validation-model/src/main/java/org/verapdf/gf/model/impl/pd/GFPDAnnot.java b/validation-model/src/main/java/org/verapdf/gf/model/impl/pd/GFPDAnnot.java index 09fada50f..d37c1b62e 100644 --- a/validation-model/src/main/java/org/verapdf/gf/model/impl/pd/GFPDAnnot.java +++ b/validation-model/src/main/java/org/verapdf/gf/model/impl/pd/GFPDAnnot.java @@ -49,10 +49,7 @@ import org.verapdf.tools.TaggedPDFConstants; import org.verapdf.tools.TaggedPDFRoleMapHelper; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -329,11 +326,23 @@ public Boolean getisArtifact() { if (taggedPDFRoleMapHelper != null) { COSObject parentDictionary = getParentDictionary(); if (parentDictionary != null) { + Set keys = new HashSet<>(); PDStructElem structElem = new PDStructElem(parentDictionary); while (structElem != null) { if (TaggedPDFConstants.ARTIFACT.equals(PDStructElem.getStructureElementStandardType(structElem))) { return true; } + + COSKey key = structElem.getObject().getObjectKey(); + + if (keys.contains(key)) { + break; + } + + if (key != null) { + keys.add(key); + } + structElem = structElem.getParent(); } }