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)