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 2015/08/01 16:34:04 UTC
svn commit: r1693709 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
Author: lehmi
Date: Sat Aug 1 14:34:03 2015
New Revision: 1693709
URL: http://svn.apache.org/r1693709
Log:
PDFBOX-2886: perform brute force search if an object key can't be found within the xref table
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=1693709&r1=1693708&r2=1693709&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 Aug 1 14:34:03 2015
@@ -687,6 +687,26 @@ public class COSParser extends BaseParse
+ objKey.getNumber() + ":" + objKey.getGeneration());
}
+ // maybe something is wrong with the xref table -> perform brute force search for all objects
+ if (offsetOrObjstmObNr == null && isLenient && bfSearchCOSObjectKeyOffsets == null)
+ {
+ bfSearchForObjects();
+ if (bfSearchCOSObjectKeyOffsets != null && !bfSearchCOSObjectKeyOffsets.isEmpty())
+ {
+ LOG.debug("Add all new read objects from brute force search to the xref table");
+ Map<COSObjectKey, Long> xrefOffset = xrefTrailerResolver.getXrefTable();
+ for (COSObjectKey key : bfSearchCOSObjectKeyOffsets.keySet())
+ {
+ // add all missing objects to the xref table
+ if (!xrefOffset.containsKey(key))
+ {
+ xrefOffset.put(key, bfSearchCOSObjectKeyOffsets.get(key));
+ }
+ }
+ offsetOrObjstmObNr = xrefOffset.get(objKey);
+ }
+ }
+
if (offsetOrObjstmObNr == null)
{
// not defined object -> NULL object (Spec. 1.7, chap. 3.2.9)