Author: nick
Date: Mon Dec 17 06:19:19 2007
New Revision: 604878

URL: http://svn.apache.org/viewvc?rev=604878&view=rev
Log:
Avoid a rare ArrayIndexOutOfBoundsException on some word table stuff (patch 
from bug #44078)

Added:
    poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/AIOOB-Tap.doc   
(with props)
Modified:
    
poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/TableSprmUncompressor.java
    
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/TableSprmUncompressor.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/TableSprmUncompressor.java?rev=604878&r1=604877&r2=604878&view=diff
==============================================================================
--- 
poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/TableSprmUncompressor.java
 (original)
+++ 
poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/TableSprmUncompressor.java
 Mon Dec 17 06:19:19 2007
@@ -148,8 +148,10 @@
 
         for (int x = 0; x < itcMac; x++)
         {
-          if(hasTCs) rgtc[x] = TableCellDescriptor.convertBytesToTC(grpprl,
-              offset + (1 + ( (itcMac + 1) * 2) + (x * 20)));
+          // Sometimes, the grpprl does not contain data at every offset. I 
have no idea why this happens.
+          if(hasTCs && offset + (1 + ( (itcMac + 1) * 2) + (x * 20)) < 
grpprl.length)
+            rgtc[x] = TableCellDescriptor.convertBytesToTC(grpprl,
+               offset + (1 + ( (itcMac + 1) * 2) + (x * 20)));
           else
             rgtc[x] = new TableCellDescriptor();
         }

Added: poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/AIOOB-Tap.doc
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/AIOOB-Tap.doc?rev=604878&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/AIOOB-Tap.doc
------------------------------------------------------------------------------
    svn:mime-type = application/msword

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=604878&r1=604877&r2=604878&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
 Mon Dec 17 06:19:19 2007
@@ -53,8 +53,25 @@
                Section s = r.getSection(x);
                for (int y = 0; y < s.numParagraphs(); y++) {
                        Paragraph paragraph = s.getParagraph(y);
-                       System.out.println(paragraph.getCharacterRun(0).text());
+                       
//System.out.println(paragraph.getCharacterRun(0).text());
                }
        }
     }
+
+       /**
+        * AIOOB for TableSprmUncompressor.unCompressTAPOperation
+        */
+       public void testSprmAIOOB() throws Exception {
+       HWPFDocument doc = new HWPFDocument(new FileInputStream(dirname + 
"/AIOOB-Tap.doc"));
+       
+       Range r = doc.getRange();
+       StyleSheet styleSheet = doc.getStyleSheet();
+       for (int x = 0; x < r.numSections(); x++) {
+               Section s = r.getSection(x);
+               for (int y = 0; y < s.numParagraphs(); y++) {
+                       Paragraph paragraph = s.getParagraph(y);
+                       
//System.out.println(paragraph.getCharacterRun(0).text());
+               }
+       }
+       }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to