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 2017/09/04 15:26:42 UTC

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

Author: tilman
Date: Mon Sep  4 15:26:42 2017
New Revision: 1807246

URL: http://svn.apache.org/viewvc?rev=1807246&view=rev
Log:
PDFBOX-3919: avoid endless loop

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=1807246&r1=1807245&r2=1807246&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 Mon Sep  4 15:26:42 2017
@@ -255,10 +255,9 @@ public class COSParser extends BaseParse
         document.setStartXref(startXrefOffset);
         long prev = startXrefOffset;
         // ---- parse whole chain of xref tables/object streams using PREV reference
-        long lastPrev = -1;
-        while (prev > 0 && prev != lastPrev)
+        Set<Long> prevSet = new HashSet<>();
+        while (prev > 0)
         {
-            lastPrev = prev;
             // seek to xref table
             source.seek(prev);
 
@@ -348,11 +347,11 @@ public class COSParser extends BaseParse
                     }
                 }
             }
-        }
-        if (prev == lastPrev)
-        {
-            //TODO better idea needed? PDFBOX-3446
-            throw new IOException("/Prev loop at offset " + prev);
+            if (prevSet.contains(prev))
+            {
+                throw new IOException("/Prev loop at offset " + prev);
+            }
+            prevSet.add(prev);
         }
         // ---- build valid xrefs out of the xref chain
         xrefTrailerResolver.setStartxref(startXrefOffset);