PDFBOX-3446: avoid /Prev loop
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1754793 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
index c08c727..4bd0611 100644
--- a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
+++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
@@ -208,8 +208,10 @@
document.setStartXref(startXrefOffset);
long prev = startXrefOffset;
// ---- parse whole chain of xref tables/object streams using PREV reference
- while (prev > 0)
+ long lastPrev = -1;
+ while (prev > 0 && prev != lastPrev)
{
+ lastPrev = prev;
// seek to xref table
source.seek(prev);
@@ -298,6 +300,11 @@
}
}
}
+ if (prev == lastPrev)
+ {
+ //TODO better idea needed? PDFBOX-3446
+ throw new IOException("/Prev loop at offset " + prev);
+ }
// ---- build valid xrefs out of the xref chain
xrefTrailerResolver.setStartxref(startXrefOffset);
COSDictionary trailer = xrefTrailerResolver.getTrailer();