You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2016/11/02 16:49:36 UTC

svn commit: r1767730 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java

Author: tilman
Date: Wed Nov  2 16:49:36 2016
New Revision: 1767730

URL: http://svn.apache.org/viewvc?rev=1767730&view=rev
Log:
PDFBOX-3546: catch exception and skip incorrect XRefStm

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=1767730&r1=1767729&r2=1767730&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 Wed Nov  2 16:49:36 2016
@@ -249,6 +249,7 @@ public class COSParser extends BaseParse
                     fixedOffset = checkXRefStreamOffset(streamOffset, false);
                     if (fixedOffset > -1 && fixedOffset != streamOffset)
                     {
+                        LOG.warn("/XRefStm offset " + streamOffset + " is incorrect, corrected to " + fixedOffset);
                         streamOffset = (int)fixedOffset;
                         trailer.setInt(COSName.XREF_STM, streamOffset);
                     }
@@ -256,7 +257,21 @@ public class COSParser extends BaseParse
                     {
                         source.seek(streamOffset);
                         skipSpaces();
-                        parseXrefObjStream(prev, false);
+                        try
+                        {
+                            parseXrefObjStream(prev, false);
+                        }
+                        catch (IOException ex)
+                        {
+                            if (isLenient)
+                            {
+                                LOG.error("Failed to parse /XRefStm at offset " + streamOffset, ex);
+                            }
+                            else
+                            {
+                                throw ex;
+                            }
+                        }
                     }
                     else
                     {