From 9aa154aa46245f09fe889c953d696a87fe57eb6e Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Tue, 18 Aug 2026 13:53:36 +0300 Subject: [PATCH] Fix unbounded recursive embedded-file validation --- .../gf/model/impl/external/GFEmbeddedFile.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/validation-model/src/main/java/org/verapdf/gf/model/impl/external/GFEmbeddedFile.java b/validation-model/src/main/java/org/verapdf/gf/model/impl/external/GFEmbeddedFile.java index a74146e1e..34dfef7f8 100644 --- a/validation-model/src/main/java/org/verapdf/gf/model/impl/external/GFEmbeddedFile.java +++ b/validation-model/src/main/java/org/verapdf/gf/model/impl/external/GFEmbeddedFile.java @@ -61,10 +61,18 @@ public class GFEmbeddedFile extends GFExternal implements EmbeddedFile { public static final String EMBEDDED_FILE_TYPE = "EmbeddedFile"; private final COSStream stream; + protected String id; public GFEmbeddedFile(COSStream stream) { super(EMBEDDED_FILE_TYPE); this.stream = stream; + + if (stream != null) { + COSKey key = stream.getObjectKey(); + id = key != null ? + key.getNumber() + " " + key.getGeneration() + " obj " + this.getObjectType() + : super.getID(); + } } @Override @@ -84,6 +92,11 @@ public Boolean getisValidPDFA12() { public Boolean getisValidPDFA124() { return isValidPDFA(new HashSet<>(Arrays.asList(PDFAFlavour.PDFA_1_B, PDFAFlavour.PDFA_2_B, PDFAFlavour.PDFA_4))); } + + @Override + public String getID() { + return this.id == null ? super.getID() : this.id; + } private boolean isValidPDFA(Set flavours) { if (this.stream == null) {