Author: lehmi
Date: Mon Jun 30 18:44:33 2014
New Revision: 1606860

URL: http://svn.apache.org/r1606860
Log:
PDFBOX-1813: added new recursion check using an unique identifier

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java?rev=1606860&r1=1606859&r2=1606860&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java 
Mon Jun 30 18:44:33 2014
@@ -26,6 +26,7 @@ import org.apache.commons.logging.LogFac
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.pdmodel.common.COSDictionaryMap;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.font.PDFont;
@@ -251,8 +252,11 @@ public class PDResources implements COSO
                     PDXObject xobject = null;
                     try
                     {
-                        xobject = 
PDXObject.createXObject(dict.getDictionaryObject(objName),
-                                                          objName.getName(), 
this);
+                        String name = objName.getName() + "#";
+                        COSObject cosObject = (COSObject)dict.getItem(objName);
+                        // add the object number to create an unique identifier
+                        name += cosObject.getObjectNumber().intValue();
+                        xobject = 
PDXObject.createXObject(cosObject.getObject(), name, this);
                     }
                     catch (IOException exception)
                     {

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java?rev=1606860&r1=1606859&r2=1606860&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java
 Mon Jun 30 18:44:33 2014
@@ -138,24 +138,14 @@ public final class PDFormXObject extends
         if (resources != null)
         {
             retval = new PDResources(resources);
-            // check for a recursion, see PDFBOX-1813
+            // check for a possible recursion
             if (name != null)
             {
                 Map<String, PDXObject> xobjects = retval.getXObjects();
                 if (xobjects != null && xobjects.containsKey(name))
                 {
-                    PDXObject xobject = xobjects.get(name);
-                    if (xobject instanceof PDFormXObject)
-                    {
-                        int length1 = getCOSStream().getInt(COSName.LENGTH);
-                        int length2 = 
xobject.getCOSStream().getInt(COSName.LENGTH);
-                        // seems to be the same object
-                        if (length1 == length2)
-                        {
-                            retval.removeXObject(name);
-                            LOG.debug("Removed XObjectForm "+name+" to avoid a 
recursion");
-                        }
-                    }
+                    retval.removeXObject(name);
+                    LOG.debug("Removed XObjectForm "+name+" to avoid a 
recursion");
                 }
             }
         }


Reply via email to