You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2015/07/25 16:23:15 UTC

svn commit: r1692623 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java

Author: lehmi
Date: Sat Jul 25 14:23:15 2015
New Revision: 1692623

URL: http://svn.apache.org/r1692623
Log:
PDFBOX-2845: removed the recursion check in getLength

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java?rev=1692623&r1=1692622&r2=1692623&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java Sat Jul 25 14:23:15 2015
@@ -814,8 +814,6 @@ public class COSParser extends BaseParse
         }
     }
     
-    private boolean inGetLength = false;
-
     /** 
      * Returns length value referred to or defined in given object. 
      */
@@ -826,53 +824,40 @@ public class COSParser extends BaseParse
             return null;
         }
 
-        if (inGetLength)
+        COSNumber retVal = null;
+        boolean isObjectStream = COSName.OBJ_STM.equals(streamType);
+        // maybe length was given directly
+        if (lengthBaseObj instanceof COSNumber)
         {
-            throw new IOException("Loop while reading length from " + lengthBaseObj);
+            retVal = (COSNumber) lengthBaseObj;
         }
-
-        COSNumber retVal = null;
-        try
+        // length in referenced object
+        else if (lengthBaseObj instanceof COSObject)
         {
-            boolean isObjectStream = COSName.OBJ_STM.equals(streamType);
-            inGetLength = true;
-            // maybe length was given directly
-            if (lengthBaseObj instanceof COSNumber)
+            COSObject lengthObj = (COSObject) lengthBaseObj;
+            if (lengthObj.getObject() == null)
             {
-                retVal = (COSNumber) lengthBaseObj;
-            }
-            // length in referenced object
-            else if (lengthBaseObj instanceof COSObject)
-            {
-                COSObject lengthObj = (COSObject) lengthBaseObj;
+                // not read so far, keep current stream position
+                final long curFileOffset = source.getPosition();
+                parseObjectDynamically(lengthObj, isObjectStream);
+                // reset current stream position
+                source.seek(curFileOffset);
                 if (lengthObj.getObject() == null)
                 {
-                    // not read so far, keep current stream position
-                    final long curFileOffset = source.getPosition();
-                    parseObjectDynamically(lengthObj, isObjectStream);
-                    // reset current stream position
-                    source.seek(curFileOffset);
-                    if (lengthObj.getObject() == null)
-                    {
-                        throw new IOException("Length object content was not read.");
-                    }
-                }
-                if (!(lengthObj.getObject() instanceof COSNumber))
-                {
-                    throw new IOException("Wrong type of referenced length object " + lengthObj
-                            + ": " + lengthObj.getObject().getClass().getSimpleName());
+                    throw new IOException("Length object content was not read.");
                 }
-                retVal = (COSNumber) lengthObj.getObject();
             }
-            else
+            if (!(lengthObj.getObject() instanceof COSNumber))
             {
-                throw new IOException("Wrong type of length object: "
-                        + lengthBaseObj.getClass().getSimpleName());
+                throw new IOException("Wrong type of referenced length object " + lengthObj
+                        + ": " + lengthObj.getObject().getClass().getSimpleName());
             }
+            retVal = (COSNumber) lengthObj.getObject();
         }
-        finally
+        else
         {
-            inGetLength = false;
+            throw new IOException("Wrong type of length object: "
+                    + lengthBaseObj.getClass().getSimpleName());
         }
         return retVal;
     }