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/05/21 14:23:10 UTC
svn commit: r1795704 -
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
Author: lehmi
Date: Sun May 21 14:23:10 2017
New Revision: 1795704
URL: http://svn.apache.org/viewvc?rev=1795704&view=rev
Log:
PDFBOX-3798: don't add cut off objects when performing a brute force search
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=1795704&r1=1795703&r2=1795704&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 Sun May 21 14:23:10 2017
@@ -1440,6 +1440,9 @@ public class COSParser extends BaseParse
bfSearchCOSObjectKeyOffsets = new HashMap<COSObjectKey, Long>();
long originOffset = source.getPosition();
long currentOffset = MINIMUM_SEARCH_OFFSET;
+ long lastObjectId = Long.MIN_VALUE;
+ int lastGenID = Integer.MIN_VALUE;
+ long lastObjOffset = Long.MIN_VALUE;
String objString = " obj";
char[] string = objString.toCharArray();
do
@@ -1471,9 +1474,17 @@ public class COSParser extends BaseParse
if (objectIDFound)
{
source.read();
- long objectID = readObjectNumber();
- bfSearchCOSObjectKeyOffsets.put(new COSObjectKey(objectID, genID),
- tempOffset + 1);
+ long objectId = readObjectNumber();
+ if (lastObjOffset > 0)
+ {
+ // add the former object ID only if there was a subsequent object ID
+ bfSearchCOSObjectKeyOffsets
+ .put(new COSObjectKey(lastObjectId, lastGenID),
+ lastObjOffset);
+ }
+ lastObjectId = objectId;
+ lastGenID = genID;
+ lastObjOffset = tempOffset + 1;
}
}
}
@@ -1481,6 +1492,13 @@ public class COSParser extends BaseParse
currentOffset++;
}
while (currentOffset < lastEOFMarker && !source.isEOF());
+ if (lastEOFMarker < Long.MAX_VALUE && lastObjOffset > 0)
+ {
+ // if the pdf wasn't cut off in the middle the last object id has to added here
+ // so that it can't get lost as there isn't any subsequent object id
+ bfSearchCOSObjectKeyOffsets.put(new COSObjectKey(lastObjectId, lastGenID),
+ lastObjOffset);
+ }
// reestablish origin position
source.seek(originOffset);
}