Author: lehmi
Date: Thu Dec 31 12:43:35 2020
New Revision: 1884987

URL: http://svn.apache.org/viewvc?rev=1884987&view=rev
Log:
PDFBOX-4623: avoid endless recursion if something went wrong when dereferencing 
the referenced object

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

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObject.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObject.java?rev=1884987&r1=1884986&r2=1884987&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObject.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObject.java Thu 
Dec 31 12:43:35 2020
@@ -34,6 +34,7 @@ public class COSObject extends COSBase i
     private int generationNumber;
     private boolean needToBeUpdated;
     private ICOSParser parser;
+    private boolean isDereferenced = false;
 
     private static final Log LOG = LogFactory.getLog(COSObject.class);
 
@@ -105,27 +106,29 @@ public class COSObject extends COSBase i
      */
     public COSBase getObject()
     {
-        if ((baseObject == null || baseObject instanceof COSNull) && parser != 
null)
+        if (!isDereferenced && parser != null)
         {
             try
             {
+                // mark as dereferenced to avoid endless recursions
+                isDereferenced = true;
                 baseObject = parser.dereferenceCOSObject(this);
-                if (baseObject != null)
-                {
-                    // remove parser to avoid endless recursions
-                    parser = null;
-                }
             }
             catch (IOException e)
             {
-                // remove parser to avoid endless recursions
-                parser = null;
                 LOG.error("Can't dereference " + this, e);
             }
+            finally
+            {
+                parser = null;
+            }
         }
         return baseObject;
     }
 
+    /**
+     * Sets the referenced object to COSNull and removes the initially 
assigned parser.
+     */
     public final void setToNull()
     {
         baseObject = COSNull.NULL;


Reply via email to