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 2017/09/30 15:13:44 UTC

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

Author: lehmi
Date: Sat Sep 30 15:13:44 2017
New Revision: 1810212

URL: http://svn.apache.org/viewvc?rev=1810212&view=rev
Log:
PDFBOX-3870: make getLength more lenient

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=1810212&r1=1810211&r2=1810212&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 Sep 30 15:13:44 2017
@@ -960,7 +960,8 @@ public class COSParser extends BaseParse
         else if (lengthBaseObj instanceof COSObject)
         {
             COSObject lengthObj = (COSObject) lengthBaseObj;
-            if (lengthObj.getObject() == null)
+            COSBase length = lengthObj.getObject();
+            if (length == null)
             {
                 // not read so far, keep current stream position
                 final long curFileOffset = source.getPosition();
@@ -968,17 +969,24 @@ public class COSParser extends BaseParse
                 parseObjectDynamically(lengthObj, isObjectStream);
                 // reset current stream position
                 source.seek(curFileOffset);
-                if (lengthObj.getObject() == null)
-                {
-                    throw new IOException("Length object content was not read.");
-                }
+                length = lengthObj.getObject();
             }
-            if (!(lengthObj.getObject() instanceof COSNumber))
+            if (length == null)
+            {
+                throw new IOException("Length object content was not read.");
+            }
+            if (COSNull.NULL == length)
+            {
+                LOG.warn("Length object (" + lengthObj.getObjectNumber() + " "
+                        + lengthObj.getGenerationNumber() + ") not found");
+                return null;
+            }
+            if (!(length instanceof COSNumber))
             {
                 throw new IOException("Wrong type of referenced length object " + lengthObj
-                        + ": " + lengthObj.getObject().getClass().getSimpleName());
+                        + ": " + length.getClass().getSimpleName());
             }
-            retVal = (COSNumber) lengthObj.getObject();
+            retVal = (COSNumber) length;
         }
         else
         {