Author: lehmi
Date: Sat Nov 15 10:37:36 2025
New Revision: 1929753

Log:
PDFBOX-6097: avoid misunderstandings, simplify

Modified:
   pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
   pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java       
Sat Nov 15 10:13:25 2025        (r1929752)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java       
Sat Nov 15 10:37:36 2025        (r1929753)
@@ -794,25 +794,21 @@ public class COSArray extends COSBase im
             {
                 return;
             }
-            else
-            {
-                indirectObjects.add(key);
-            }
+            indirectObjects.add(key);
         }
-
         for (COSBase cosBase : objects)
         {
             if (cosBase == null)
             {
                 continue;
             }
-            COSObjectKey cosBaseKey = cosBase.getKey();
-            if (cosBaseKey != null && indirectObjects.contains(cosBaseKey))
-            {
-                continue;
-            }
-            if (cosBase instanceof COSObject)
+            COSObjectKey indirectObjectKey = cosBase instanceof COSObject ? 
cosBase.getKey() : null;
+            if (indirectObjectKey != null)
             {
+                if (indirectObjects.contains(indirectObjectKey))
+                {
+                    continue;
+                }
                 // dereference object
                 cosBase = ((COSObject) cosBase).getObject();
             }
@@ -826,10 +822,10 @@ public class COSArray extends COSBase im
                 // descend to included array to collect all included indirect 
objects
                 ((COSArray) cosBase).getIndirectObjectKeys(indirectObjects);
             }
-            else if (cosBaseKey != null)
+            else if (indirectObjectKey != null)
             {
                 // add key for all indirect objects other than 
COSDictionary/COSArray
-                indirectObjects.add(cosBaseKey);
+                indirectObjects.add(indirectObjectKey);
             }
         }
     }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java  
Sat Nov 15 10:13:25 2025        (r1929752)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java  
Sat Nov 15 10:37:36 2025        (r1929753)
@@ -51,8 +51,6 @@ public class COSDictionary extends COSBa
 
     private static final String PATH_SEPARATOR = "/";
 
-    private static final List<COSName> PARENT_KEYS = 
Arrays.asList(COSName.PARENT, COSName.P);
-
     /**
      * The name-value pairs of this dictionary. The pairs are kept in the 
order they were added to the dictionary.
      */
@@ -1449,40 +1447,41 @@ public class COSDictionary extends COSBa
             {
                 return;
             }
-            else
-            {
-                indirectObjects.add(key);
-            }
+            indirectObjects.add(key);
         }
         for (Entry<COSName, COSBase> entry : items.entrySet())
         {
             COSBase cosBase = entry.getValue();
-            COSObjectKey cosBaseKey = cosBase != null ? cosBase.getKey() : 
null;
-            // avoid endless recursions
-            if (PARENT_KEYS.contains(entry.getKey())
-                    || (cosBaseKey != null && 
indirectObjects.contains(cosBaseKey)))
-            {
-                continue;
-            }
-            if (cosBase instanceof COSObject)
+            COSObjectKey indirectObjectKey = cosBase instanceof COSObject ? 
cosBase.getKey() : null;
+            if (indirectObjectKey != null)
             {
+                // avoid endless recursions
+                if (indirectObjects.contains(indirectObjectKey))
+                {
+                    continue;
+                }
                 // dereference object
                 cosBase = ((COSObject) cosBase).getObject();
             }
             if (cosBase instanceof COSDictionary)
             {
+                COSName entryKey = entry.getKey();
                 // descend to included dictionary to collect all included 
indirect objects
-                ((COSDictionary) 
cosBase).getIndirectObjectKeys(indirectObjects);
+                // skip PARENT and P references to avoid recursions
+                if (!COSName.PARENT.equals(entryKey) && 
!COSName.P.equals(entryKey))
+                {
+                    ((COSDictionary) 
cosBase).getIndirectObjectKeys(indirectObjects);
+                }
             }
             else if (cosBase instanceof COSArray)
             {
                 // descend to included array to collect all included indirect 
objects
                 ((COSArray) cosBase).getIndirectObjectKeys(indirectObjects);
             }
-            else if (cosBaseKey != null)
+            else if (indirectObjectKey != null)
             {
                 // add key for all indirect objects other than 
COSDictionary/COSArray
-                indirectObjects.add(cosBaseKey);
+                indirectObjects.add(indirectObjectKey);
             }
         }
     }

Reply via email to