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;