poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ser...@apache.org
Subject svn commit: r1143786 - in /poi/trunk/src: documentation/content/xdocs/status.xml scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
Date Thu, 07 Jul 2011 12:11:53 GMT
Author: sergey
Date: Thu Jul  7 12:11:53 2011
New Revision: 1143786

URL: http://svn.apache.org/viewvc?rev=1143786&view=rev
Log:
fix 47287 - StringIndexOutOfBoundsException in CharacterRun.replaceText()

Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java
    poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1143786&r1=1143785&r2=1143786&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Thu Jul  7 12:11:53 2011
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta4" date="2011-??-??">
+           <action dev="poi-developers" type="fix">47287 - StringIndexOutOfBoundsException
in CharacterRun.replaceText()</action>
            <action dev="poi-developers" type="fix">46817 - Regression: Text from some
table cells missing</action>
            <action dev="poi-developers" type="add">Add getOverallRange() method to
HWPFDocumentCore</action>
            <action dev="poi-developers" type="fix">PAPX referenced outside of TextPiecesTable
are ignored now and not loaded</action>

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java?rev=1143786&r1=1143785&r2=1143786&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java Thu Jul  7 12:11:53
2011
@@ -141,7 +141,10 @@ public final class TextPiece extends Pro
 		   /* find where the deleted area overlaps with this text piece */
 		   int overlapStart = Math.max(myStart, start);
 		   int overlapEnd = Math.min(myEnd, end);
-		   ((StringBuffer)_buf).delete(overlapStart, overlapEnd);
+
+		   int bufStart = overlapStart - myStart;
+		   int bufEnd = overlapEnd - myStart;
+		   ((StringBuffer)_buf).delete(bufStart, bufEnd);
 	   }
 
 	   // We need to invoke this even if text from this piece is not being

Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java?rev=1143786&r1=1143785&r2=1143786&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java (original)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java Thu
Jul  7 12:11:53 2011
@@ -525,75 +525,79 @@ public final class TestProblems extends 
     }
 
     /**
-     * [FAILING] Bug 47287 - StringIndexOutOfBoundsException in CharacterRun.replaceText()
+     * [RESOLVED FIXED] Bug 47287 - StringIndexOutOfBoundsException in
+     * CharacterRun.replaceText()
      */
-    public void test47287() {
-        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug47287.doc");
-        String[] values = {
-                "1-1",
-                "1-2",
-                "1-3",
-                "1-4",
-                "1-5",
-                "1-6",
-                "1-7",
-                "1-8",
-                "1-9",
-                "1-10",
-                "1-11",
-                "1-12",
-                "1-13",
-                "1-14",
-                "1-15",
-        };
+    public void test47287()
+    {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile( "Bug47287.doc" );
+        String[] values = { "1-1", "1-2", "1-3", "1-4", "1-5", "1-6", "1-7",
+                "1-8", "1-9", "1-10", "1-11", "1-12", "1-13", "1-14", "1-15", };
         int usedVal = 0;
-        try {
-            String PLACEHOLDER = "\u2002\u2002\u2002\u2002\u2002";
-            Range r = doc.getRange();
-            for (int x = 0; x < r.numSections(); x++) {
-                Section s = r.getSection(x);
-                for (int y = 0; y < s.numParagraphs(); y++) {
-                    Paragraph p = s.getParagraph(y);
-
-                    for (int z = 0; z < p.numCharacterRuns(); z++) {
-                        boolean isFound = false;
-
-                        //character run
-                        CharacterRun run = p.getCharacterRun(z);
-                        //character run text
-                        String text = run.text();
-                        String oldText = text;
-                        int c = text.indexOf("FORMTEXT ");
-                        if (c < 0) {
-                            int k = text.indexOf(PLACEHOLDER);
-                            if (k >= 0) {
-                                text = text.substring(0, k) + values[usedVal] + text.substring(k
+ PLACEHOLDER.length());
+        String PLACEHOLDER = "\u2002\u2002\u2002\u2002\u2002";
+        Range r = doc.getRange();
+        for ( int x = 0; x < r.numSections(); x++ )
+        {
+            Section s = r.getSection( x );
+            for ( int y = 0; y < s.numParagraphs(); y++ )
+            {
+                Paragraph p = s.getParagraph( y );
+
+                for ( int z = 0; z < p.numCharacterRuns(); z++ )
+                {
+                    boolean isFound = false;
+
+                    // character run
+                    CharacterRun run = p.getCharacterRun( z );
+                    // character run text
+                    String text = run.text();
+                    String oldText = text;
+                    int c = text.indexOf( "FORMTEXT " );
+                    if ( c < 0 )
+                    {
+                        int k = text.indexOf( PLACEHOLDER );
+                        if ( k >= 0 )
+                        {
+                            text = text.substring( 0, k ) + values[usedVal]
+                                    + text.substring( k + PLACEHOLDER.length() );
+                            usedVal++;
+                            isFound = true;
+                        }
+                    }
+                    else
+                    {
+                        for ( ; c >= 0; c = text.indexOf( "FORMTEXT ", c
+                                + "FORMTEXT ".length() ) )
+                        {
+                            int k = text.indexOf( PLACEHOLDER, c );
+                            if ( k >= 0 )
+                            {
+                                text = text.substring( 0, k )
+                                        + values[usedVal]
+                                        + text.substring( k
+                                                + PLACEHOLDER.length() );
                                 usedVal++;
                                 isFound = true;
                             }
-                        } else {
-                            for (; c >= 0; c = text.indexOf("FORMTEXT ", c + "FORMTEXT
".length())) {
-                                int k = text.indexOf(PLACEHOLDER, c);
-                                if (k >= 0) {
-                                    text = text.substring(0, k) + values[usedVal] + text.substring(k
+ PLACEHOLDER.length());
-                                    usedVal++;
-                                    isFound = true;
-                                }
-                            }
                         }
-                        if (isFound) {
-                            run.replaceText(oldText, text, 0);
-                        }
-
                     }
+                    if ( isFound )
+                    {
+                        run.replaceText( oldText, text, 0 );
+                    }
+
                 }
             }
-            fixed("47287");
-        } catch (StringIndexOutOfBoundsException e) {
-            // expected exception
         }
-    }
 
+        String docText = r.text();
+
+        assertTrue( docText.contains( "1-1" ) );
+        assertTrue( docText.contains( "1-12" ) );
+
+        assertFalse( docText.contains( "1-13" ) );
+        assertFalse( docText.contains( "1-15" ) );
+    }
 
     private static void insertTable(int rows, int columns) {
         // POI apparently can't create a document from scratch,



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message