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; }