Bug 45686

Summary: Multible calls of TextRun.changeTextInRichTextRun causes Exception
Product: POI Reporter: Thorsten <thorstenbux>
Component: HSLFAssignee: POI Developers List <dev>
Status: RESOLVED WORKSFORME    
Severity: normal    
Priority: P2    
Version: 3.0-FINAL   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Attachments: sample source code

Description Thorsten 2008-08-25 08:36:40 UTC
Created attachment 22479 [details]
sample source code

Hi,

 I try to update RichTextRun-Objects in a TextRun-Object.

When I call TextRun.changeTextInRichTextRun(RichTextRun[0],"") the first time everything works fine. But when I call it a second time TextRun.changeTextInRichTextRun(RichTextRun[1],"Hello") I get the following Exception:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 68
     at java.lang.String.substring(Unknown Source)
     at org.apache.poi.hslf.usermodel.RichTextRun.getRawText(RichTextRun.java:158)
     at org.apache.poi.hslf.model.TextRun.changeTextInRichTextRun(TextRun.java:435)
     at substitutionClassesForPptParser.SimpleSubstitution.handeSubstitution(SimpleSubstitution.java:99)
     at methodsFromPptParser.ProcessPptDocumet.importPlaceholder(ProcessPptDocumet.java:94)
     at Tester.main(Tester.java:16)


 I try something like that.

 RichTextRun[0] --> "Hello"
 RichTextRun[1] --> "World"
 RichTextRun[2] --> "POI"


 TextRun.changeTextInRichTextRun(RichTextRun[0], "");
 TextRun.changeTextInRichTextRun(RichTextRun[1], "Java");
 TextRun.changeTextInRichTextRun(RichTextRun[0], "Apache");


I have attached some sample source code
Comment 1 Dominik Stadler 2015-05-01 20:22:06 UTC
I quickly tried to reproduce this old bug report, but could not. Also the code that you posted is not self-sufficient, so it is hard to exactly run what you did back then. 

So I believe that this is fixed in the meantime and thus will close this as WORKSFORME for now. If this is still a problem for you then please reopen the bug together with a self-sufficient unit test and any sample files that are used in the test so we can reproduce the problem.