You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/07/08 20:29:40 UTC
svn commit: r1608875 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java
Author: jahewson
Date: Tue Jul 8 18:29:40 2014
New Revision: 1608875
URL: http://svn.apache.org/r1608875
Log:
PDFBOX-1533: Ignore duplicate page tree nodes
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java?rev=1608875&r1=1608874&r2=1608875&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java Tue Jul 8 18:29:40 2014
@@ -30,6 +30,7 @@ import org.apache.pdfbox.pdmodel.common.
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -199,27 +200,33 @@ public class PDPageNode implements COSOb
log.error("No Kids found in getAllKids(). Probably a malformed pdf.");
return null;
}
+ HashSet<COSBase> seen = new HashSet<COSBase>();
for( int i=0; i<kids.size(); i++ )
{
- COSBase obj = kids.getObject( i );
- if (obj instanceof COSDictionary)
+ // ignore duplicates (from malformed PDFs)
+ if (!seen.contains(kids.get(i)))
{
- COSDictionary kid = (COSDictionary)obj;
- if( COSName.PAGE.equals( kid.getDictionaryObject( COSName.TYPE ) ) )
+ COSBase obj = kids.getObject( i );
+ if (obj instanceof COSDictionary)
{
- result.add( new PDPage( kid ) );
- }
- else
- {
- if (recurse)
+ COSDictionary kid = (COSDictionary)obj;
+ if( COSName.PAGE.equals( kid.getDictionaryObject( COSName.TYPE ) ) )
{
- getAllKids(result, kid, recurse);
+ result.add( new PDPage( kid ) );
}
else
{
- result.add( new PDPageNode( kid ) );
+ if (recurse)
+ {
+ getAllKids(result, kid, recurse);
+ }
+ else
+ {
+ result.add( new PDPageNode( kid ) );
+ }
}
}
+ seen.add(kids.get(i));
}
}
return kids;