diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/Table.java b/src/scratchpad/src/org/apache/poi/hslf/model/Table.java index c494789917..bafc851824 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/model/Table.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/Table.java @@ -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; diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java index e8f246bbd6..1740b46b40 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java @@ -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 Table 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 Table @@ -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 index 0000000000..e7525f9456 Binary files /dev/null and b/test-data/slideshow/bug57820-initTableNullRefrenceException.ppt differ