Author: lehmi
Date: Sat Nov 15 10:37:53 2025
New Revision: 1929754
Log:
PDFBOX-6097: avoid misunderstandings, simplify
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
==============================================================================
---
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
Sat Nov 15 10:37:36 2025 (r1929753)
+++
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
Sat Nov 15 10:37:53 2025 (r1929754)
@@ -784,25 +784,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();
}
@@ -816,10 +812,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/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
==============================================================================
---
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
Sat Nov 15 10:37:36 2025 (r1929753)
+++
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
Sat Nov 15 10:37:53 2025 (r1929754)
@@ -52,8 +52,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.
*/
@@ -1466,40 +1464,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);
}
}
}