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:03 UTC
svn commit: r1826402 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
Author: lehmi
Date: Sat Mar 10 13:42:03 2018
New Revision: 1826402
URL: http://svn.apache.org/viewvc?rev=1826402&view=rev
Log:
PDFBOX-4084: be lenient if the read generation number is bigger than the expected one
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=1826402&r1=1826401&r2=1826402&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 Mar 10 13:42:03 2018
@@ -1356,7 +1356,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))
@@ -1410,17 +1410,21 @@ 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)
@@ -1428,10 +1432,6 @@ public class COSParser extends BaseParse
// Swallow the exception, obviously there isn't any valid object number
LOG.debug("No valid object at given location " + offset + " - ignoring", exception);
}
- finally
- {
- source.seek(originOffset);
- }
// return resulting value
return objectKeyFound;
}