Author: lehmi
Date: Sat Jul 25 13:48:51 2015
New Revision: 1692620

URL: http://svn.apache.org/r1692620
Log:
PDFBOX-2845: limit the check for /Length being an indirect object to object 
streams

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=1692620&r1=1692619&r2=1692620&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 13:48:51 2015
@@ -695,7 +695,7 @@ public class COSParser extends BaseParse
             else if (offsetOrObjstmObNr > 0)
             {
                 // offset of indirect object in file
-                parseFileObject(offsetOrObjstmObNr, objKey, objNr, objGenNr, 
pdfObject);
+                parseFileObject(offsetOrObjstmObNr, objKey, pdfObject);
             }
             else
             {
@@ -707,7 +707,7 @@ public class COSParser extends BaseParse
         return pdfObject.getObject();
     }
 
-    private void parseFileObject(Long offsetOrObjstmObNr, final COSObjectKey 
objKey, long objNr, int objGenNr, final COSObject pdfObject) throws IOException
+    private void parseFileObject(Long offsetOrObjstmObNr, final COSObjectKey 
objKey, final COSObject pdfObject) throws IOException
     {
         // ---- go to object start
         source.seek(offsetOrObjstmObNr);
@@ -738,7 +738,7 @@ public class COSParser extends BaseParse
 
                 if (securityHandler != null)
                 {
-                    securityHandler.decryptStream(stream, objNr, objGenNr);
+                    securityHandler.decryptStream(stream, objKey.getNumber(), 
objKey.getGeneration());
                 }
                 pb = stream;
             }
@@ -767,7 +767,7 @@ public class COSParser extends BaseParse
         }
         else if (securityHandler != null)
         {
-            securityHandler.decrypt(pb, objNr, objGenNr);
+            securityHandler.decrypt(pb, objKey.getNumber(), 
objKey.getGeneration());
         }
 
         pdfObject.setObject(pb);
@@ -819,7 +819,7 @@ public class COSParser extends BaseParse
     /** 
      * Returns length value referred to or defined in given object. 
      */
-    private COSNumber getLength(final COSBase lengthBaseObj) throws IOException
+    private COSNumber getLength(final COSBase lengthBaseObj, final COSName 
streamType) throws IOException
     {
         if (lengthBaseObj == null)
         {
@@ -832,9 +832,9 @@ public class COSParser extends BaseParse
         }
 
         COSNumber retVal = null;
-
         try
         {
+            boolean isObjectStream = COSName.OBJ_STM.equals(streamType);
             inGetLength = true;
             // maybe length was given directly
             if (lengthBaseObj instanceof COSNumber)
@@ -849,7 +849,7 @@ public class COSParser extends BaseParse
                 {
                     // not read so far, keep current stream position
                     final long curFileOffset = source.getPosition();
-                    parseObjectDynamically(lengthObj, true);
+                    parseObjectDynamically(lengthObj, isObjectStream);
                     // reset current stream position
                     source.seek(curFileOffset);
                     if (lengthObj.getObject() == null)
@@ -908,7 +908,7 @@ public class COSParser extends BaseParse
             /*
              * This needs to be dic.getItem because when we are parsing, the 
underlying object might still be null.
              */
-            COSNumber streamLengthObj = getLength(dic.getItem(COSName.LENGTH));
+            COSNumber streamLengthObj = getLength(dic.getItem(COSName.LENGTH), 
dic.getCOSName(COSName.TYPE));
             if (streamLengthObj == null)
             {
                 if (isLenient)


Reply via email to