diff --git a/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java b/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java index 3e99ccbf4..209a74767 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java +++ b/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java @@ -102,7 +102,8 @@ public class StyleTextPropAtom extends RecordAtom new TextProp(2, 0x4000, "spaceafter"), new TextProp(2, 0x8000, "para_unknown_4"), new TextProp(2, 0x10000, "para_unknown_5"), - new TextProp(2, 0xA0000, "para_unknown_6") + new TextProp(2, 0xA0000, "para_unknown_6"), + new TextProp(2, 0x200000, "para_unknown_7") }; /** All the different kinds of character properties we might handle */ public static TextProp[] characterTextPropTypes = new TextProp[] { diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/data/bug-41015.ppt b/src/scratchpad/testcases/org/apache/poi/hslf/data/bug-41015.ppt new file mode 100644 index 000000000..b804a6021 Binary files /dev/null and b/src/scratchpad/testcases/org/apache/poi/hslf/data/bug-41015.ppt differ diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRun.java b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRun.java index c35a6a0c6..7fddde622 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRun.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRun.java @@ -412,4 +412,36 @@ public class TestTextRun extends TestCase { assertEquals(tpCC.getTextPropList(), ntpCC.getTextPropList()); assertEquals(tpDC.getTextPropList(), ntpDC.getTextPropList()); } + + + /** + * Test case for Bug 41015. + * + * In some cases RichTextRun.getText() threw StringIndexOutOfBoundsException because + * of the wrong list of potential paragraph properties defined in StyleTextPropAtom. + * + */ + public void testBug41015() throws Exception { + RichTextRun[] rt; + + SlideShow ppt = new SlideShow(new HSLFSlideShow(System.getProperty("HSLF.testdata.path") + "/bug-41015.ppt")); + Slide sl = ppt.getSlides()[0]; + TextRun[] txt = sl.getTextRuns(); + assertEquals(2, txt.length); + + rt = txt[0].getRichTextRuns(); + assertEquals(1, rt.length); + assertEquals(0, rt[0].getIndentLevel()); + assertEquals("sdfsdfsdf", rt[0].getText()); + + rt = txt[1].getRichTextRuns(); + assertEquals(2, rt.length); + assertEquals(0, rt[0].getIndentLevel()); + assertEquals("Sdfsdfsdf\n" + + "Dfgdfg\n" + + "Dfgdfgdfg\n", rt[0].getText()); + assertEquals(1, rt[1].getIndentLevel()); + assertEquals("Sdfsdfs\n" + + "Sdfsdf\n", rt[1].getText()); + } }