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);