You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ad...@apache.org on 2010/11/23 18:35:35 UTC

svn commit: r1038216 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java test/resources/org/apache/pdfbox/pdmodel/page_label.pdf

Author: adam
Date: Tue Nov 23 17:35:34 2010
New Revision: 1038216

URL: http://svn.apache.org/viewvc?rev=1038216&view=rev
Log:
PDFBOX-900: ArrayIndexOutOfBoundsException with extracting labels from malformed document
Patch contributed by Kevin Jackson, test case added by Adam Nichols

Added:
    pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/page_label.pdf   (with props)
Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java?rev=1038216&r1=1038215&r2=1038216&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java Tue Nov 23 17:35:34 2010
@@ -108,7 +108,8 @@ public class PDPageLabels implements COS
             Map<Integer, COSDictionary> numbers = node.getNumbers();
             for (Entry<Integer, COSDictionary> i : numbers.entrySet())
             {
-                labels.put(i.getKey(), new PDPageLabelRange(i.getValue()));
+                if(i.getKey() >= 0)
+                    labels.put(i.getKey(), new PDPageLabelRange(i.getValue()));
             }
         }
     }

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java?rev=1038216&r1=1038215&r2=1038216&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java Tue Nov 23 17:35:34 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.pdfbox.pdmodel;
 
+import java.io.File;
 import junit.framework.TestCase;
 
 public class TestPDDocumentCatalog extends TestCase {
@@ -26,10 +27,9 @@ public class TestPDDocumentCatalog exten
      *   >PDFBOX-90</a> - Support explicit retrieval of page labels.
      */
     public void testPageLabels() throws Exception {
-        PDDocument doc = PDDocument.load(
-                TestPDDocumentCatalog.class.getResourceAsStream(
-                        "test_pagelabels.pdf"));
+        PDDocument doc = null;
         try {
+            doc = PDDocument.load("pdfbox/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/test_pagelabels.pdf");
             PDDocumentCatalog cat = doc.getDocumentCatalog();
             String[] labels = cat.getPageLabels().getLabelsByPageIndices();
             assertEquals(12, labels.length);
@@ -46,8 +46,29 @@ public class TestPDDocumentCatalog exten
             assertEquals("Appendix I", labels[10]);
             assertEquals("Appendix II", labels[11]);
         } finally {
-            doc.close();
+            if(doc != null)
+                doc.close();
         }
     }
 
+    /**
+     * Test case for
+     * <a href="https://issues.apache.org/jira/browse/PDFBOX-900"
+     *   >PDFBOX-900</a> - Handle malformed PDFs
+     */
+    public void testLabelsOnMalformedPdf() throws Exception {
+        PDDocument doc = null;
+        try {
+            doc = PDDocument.load("pdfbox/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/page_label.pdf");
+            PDDocumentCatalog cat = doc.getDocumentCatalog();
+            // getLabelsByPageIndices() should not throw an exception
+            String[] labels = cat.getPageLabels().getLabelsByPageIndices();
+        } catch(Exception e) {
+            e.printStackTrace();
+            fail("Threw exception!");
+        } finally {
+            if(doc != null)
+                doc.close();
+        }
+    }
 }

Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/page_label.pdf
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/page_label.pdf?rev=1038216&view=auto
==============================================================================
Binary file - no diff available.

Propchange: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/page_label.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream