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;