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/11 17:47:28 UTC

svn commit: r1794859 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java

Author: lehmi
Date: Thu May 11 17:47:27 2017
New Revision: 1794859

URL: http://svn.apache.org/viewvc?rev=1794859&view=rev
Log:
PDFBOX-3788: don't use the startxref value found by a brute force search if it isn't a valid pointer to a 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=1794859&r1=1794858&r2=1794859&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 Thu May 11 17:47:27 2017
@@ -402,7 +402,12 @@ public class COSParser extends BaseParse
             if (isLenient) 
             {
                 LOG.debug("Performing brute force search for last startxref entry");
-                return bfSearchForLastStartxrefEntry();
+                long bfOffset = bfSearchForLastStartxrefEntry();
+                source.seek(bfOffset);
+                long bfXref = parseStartXref();
+                source.seek(0);
+                // use the new offset only if it is a valid pointer to a xref table
+                return checkXRefOffset(bfXref) == bfXref ? bfOffset : -1;
             }
             else
             {
@@ -1619,7 +1624,6 @@ public class COSParser extends BaseParse
      */
     private long bfSearchForLastStartxrefEntry() throws IOException
     {
-        long originOffset = source.getPosition();
         long lastStartxref = -1;
         source.seek(MINIMUM_SEARCH_OFFSET);
         // search for startxref
@@ -1632,7 +1636,6 @@ public class COSParser extends BaseParse
             }
             source.read();
         }
-        source.seek(originOffset);
         return lastStartxref;
     }