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 2018/03/10 13:42:15 UTC

svn commit: r1826403 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java

Author: lehmi
Date: Sat Mar 10 13:42:15 2018
New Revision: 1826403

URL: http://svn.apache.org/viewvc?rev=1826403&view=rev
Log:
PDFBOX-4084: be lenient if the read generation number is bigger than the expected one

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

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java?rev=1826403&r1=1826402&r2=1826403&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java Sat Mar 10 13:42:15 2018
@@ -1395,7 +1395,7 @@ public class COSParser extends BaseParse
         {
             COSObjectKey objectKey = objectEntry.getKey();
             Long objectOffset = objectEntry.getValue();
-            // a negative offset number represents a object number itself
+            // a negative offset number represents an object number itself
             // see type 2 entry in xref stream
             if (objectOffset != null && objectOffset >= 0
                     && !checkObjectKey(objectKey, objectOffset))
@@ -1449,27 +1449,27 @@ public class COSParser extends BaseParse
             return false;
         }
         boolean objectKeyFound = false;
-        long originOffset = source.getPosition();
         try 
         {
             source.seek(offset);
             // try to read the given object/generation number
-            if (objectKey.getNumber() == readObjectNumber()
-                    && objectKey.getGeneration() == readGenerationNumber())
+            if (objectKey.getNumber() == readObjectNumber())
             {
-                // finally tro to read the object marker
-                readExpectedString(OBJ_MARKER, true);
-                objectKeyFound = true;
+                int genNumber = readGenerationNumber();
+                //
+                if (genNumber == objectKey.getGeneration()
+                        || (isLenient && genNumber > objectKey.getGeneration()))
+                {
+                    // finally try to read the object marker
+                    readExpectedString(OBJ_MARKER, true);
+                    objectKeyFound = true;
+                }
             }
         }
         catch (IOException exception)
         {
             // Swallow the exception, obviously there isn't any valid object number
         }
-        finally 
-        {
-            source.seek(originOffset);
-        }
         // return resulting value
         return objectKeyFound;
     }