]> source.dussan.org Git - poi.git/commitdiff
Patch from Jon Scharff from bug #57820 - Avoid NPE on HSLF Tables with a top positio...
authorNick Burch <nick@apache.org>
Sat, 18 Apr 2015 04:16:28 +0000 (04:16 +0000)
committerNick Burch <nick@apache.org>
Sat, 18 Apr 2015 04:16:28 +0000 (04:16 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1674441 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hslf/model/Table.java
src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java
test-data/slideshow/bug57820-initTableNullRefrenceException.ppt [new file with mode: 0644]

index c494789917a6a4918f9e8eb77b3dfb88b3b9954c..bafc851824aec3994fc10701467c8ac8f192b020 100644 (file)
@@ -159,7 +159,7 @@ public final class Table extends ShapeGroup {
                 return delta;
             }
         });
-        int y0 = -1;
+        int y0 = (sh.length > 0) ? sh[0].getAnchor().y - 1 : -1;
         int maxrowlen = 0;
         ArrayList lst = new ArrayList();
         ArrayList row = null;
index e8f246bbd6f3fbbfc0a12b1c0155b10f7fdb9a98..1740b46b408ebbe682563ce136d3d273ace9a449 100644 (file)
@@ -19,11 +19,16 @@ package org.apache.poi.hslf.model;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 
 import junit.framework.TestCase;
 
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.hslf.HSLFSlideShow;
+import org.apache.poi.hslf.extractor.PowerPointExtractor;
 import org.apache.poi.hslf.record.TextHeaderAtom;
 import org.apache.poi.hslf.usermodel.SlideShow;
+import org.junit.Test;
 
 /**
  * Test <code>Table</code> object.
@@ -31,6 +36,7 @@ import org.apache.poi.hslf.usermodel.SlideShow;
  * @author Yegor Kozlov
  */
 public final class TestTable extends TestCase {
+    private static POIDataSamples _slTests = POIDataSamples.getSlideShowInstance();
 
     /**
      * Test that ShapeFactory works properly and returns <code>Table</code>
@@ -100,4 +106,30 @@ public final class TestTable extends TestCase {
 
         }
     }
+    
+    /**
+     * Bug 57820: initTable throws NullPointerException
+     * when the table is positioned with its top at -1
+     */
+    @Test
+    public void test57820() throws Exception {
+        SlideShow ppt = new SlideShow(new HSLFSlideShow(_slTests.openResourceAsStream("bug57820-initTableNullRefrenceException.ppt")));
+
+        Slide[] slides = ppt.getSlides();
+        assertEquals(1, slides.length);
+
+        Shape[] shapes = slides[0].getShapes(); //throws NullPointerException
+
+        Table tbl = null;
+        for(int idx = 0; idx < shapes.length; idx++) {
+            if(shapes[idx] instanceof Table) {
+                tbl = (Table)shapes[idx];
+                break;
+            }
+        }
+
+        assertNotNull(tbl);
+
+        assertEquals(-1, tbl.getAnchor().y);
+    }
 }
diff --git a/test-data/slideshow/bug57820-initTableNullRefrenceException.ppt b/test-data/slideshow/bug57820-initTableNullRefrenceException.ppt
new file mode 100644 (file)
index 0000000..e7525f9
Binary files /dev/null and b/test-data/slideshow/bug57820-initTableNullRefrenceException.ppt differ