]> source.dussan.org Git - poi.git/commitdiff
#57843 - RuntimeException on extracting text from Word 97-2004 Document
authorAndreas Beeker <kiwiwings@apache.org>
Thu, 16 Apr 2020 22:11:34 +0000 (22:11 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Thu, 16 Apr 2020 22:11:34 +0000 (22:11 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1876641 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/model/PAPFormattedDiskPage.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java

index 804f0653cfe0004699fa30296b7fc7a9a8170eb9..e9c56cc558807e59767c6ff7bc16bb43fb19f1d0 100644 (file)
@@ -137,18 +137,13 @@ public final class PAPFormattedDiskPage extends FormattedDiskPage {
     {
         int papxOffset = 2 * LittleEndian.getUByte(_fkp, _offset + (((_crun + 1) * FC_SIZE) + (index * BX_SIZE)));
         int size = 2 * LittleEndian.getUByte(_fkp, _offset + papxOffset);
-        if(size == 0)
-        {
+        if(size == 0) {
             size = 2 * LittleEndian.getUByte(_fkp, _offset + ++papxOffset);
-        }
-        else
-        {
+        } else {
             size--;
         }
 
-        byte[] papx = IOUtils.safelyAllocate(size, 512);
-        System.arraycopy(_fkp, _offset + ++papxOffset, papx, 0, size);
-        return papx;
+        return IOUtils.safelyClone(_fkp, _offset + papxOffset + 1, size, 512);
     }
 
     /**
@@ -273,8 +268,7 @@ public final class PAPFormattedDiskPage extends FormattedDiskPage {
                 // LittleEndian.putUShort( dataStream, hugeGrpprlOffset,
                 // grpprl.length - 2 );
 
-                byte[] hugePapx = new byte[grpprl.length - 2];
-                System.arraycopy( grpprl, 2, hugePapx, 0, grpprl.length - 2 );
+                byte[] hugePapx = Arrays.copyOfRange(grpprl, 2, grpprl.length);
                 int dataStreamOffset = dataStream.size();
                 dataStream.write( hugePapx );
 
index e0a0671c77c8bbeb84c6efb9b51c6f02f6164357..cdeceb5482a1418b83154e8fa1cf7939a57de6be 100644 (file)
@@ -195,25 +195,25 @@ public class TestBugs{
      */
     @Test
     public void test44431_2() throws IOException {
-        assertEqualsIgnoreNewline("File name=FieldsTest.doc\n" + 
-                       "\n" + 
-                       "\n" + 
-                       "STYLEREF test\n" + 
-                       "\n" + 
-                       "\n" + 
-                       "\n" + 
-                       "TEST TABLE OF CONTENTS\n" + 
-                       "\n" + 
-                       "Heading paragraph in next page\t2\n" + 
-                       "Another heading paragraph in further page\t3\n" + 
-                       "Another heading paragraph in further page\t3\n" + 
-                       "\n" + 
-                       "\n" + 
-                       "Heading paragraph in next page\n" + 
-                       "Another heading paragraph in further page\n" + 
-                       "\n" + 
-                       "\n" + 
-                       "\n" + 
+        assertEqualsIgnoreNewline("File name=FieldsTest.doc\n" +
+                       "\n" +
+                       "\n" +
+                       "STYLEREF test\n" +
+                       "\n" +
+                       "\n" +
+                       "\n" +
+                       "TEST TABLE OF CONTENTS\n" +
+                       "\n" +
+                       "Heading paragraph in next page\t2\n" +
+                       "Another heading paragraph in further page\t3\n" +
+                       "Another heading paragraph in further page\t3\n" +
+                       "\n" +
+                       "\n" +
+                       "Heading paragraph in next page\n" +
+                       "Another heading paragraph in further page\n" +
+                       "\n" +
+                       "\n" +
+                       "\n" +
                        "Page 3 of 3", getText("Bug44431.doc"));
     }
 
@@ -484,7 +484,7 @@ public class TestBugs{
             HWPFDocument hwpfDocument = HWPFTestDataSamples.openSampleFile(filename);
 
             assertNotNull(filename, hwpfDocument.getPicturesTable().getAllPictures());
-        
+
             hwpfDocument.close();
         }
     }
@@ -570,10 +570,8 @@ public class TestBugs{
     public void test51604p3() throws Exception {
         HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug51604.doc");
 
-        byte[] originalData = new byte[doc.getFileInformationBlock()
-                .getLcbDop()];
-        System.arraycopy(doc.getTableStream(), doc.getFileInformationBlock()
-                .getFcDop(), originalData, 0, originalData.length);
+        FileInformationBlock fib = doc.getFileInformationBlock();
+        byte[] originalData = Arrays.copyOfRange(doc.getTableStream(), fib.getFcDop(), fib.getFcDop()+fib.getLcbDop());
 
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
         doc.getDocProperties().writeTo(outputStream);
@@ -731,11 +729,11 @@ public class TestBugs{
     public void testBug53380_4() throws Exception {
         assertNotNull(getText("Bug53380_4.doc"));
     }
-    
+
     /**
-     * java.lang.UnsupportedOperationException: Non-extended character 
+     * java.lang.UnsupportedOperationException: Non-extended character
      *  Pascal strings are not supported right now
-     * 
+     *
      * Disabled pending a fix for the bug
      */
     @Test
@@ -744,7 +742,7 @@ public class TestBugs{
                 HWPFTestDataSamples.openSampleFile("56880.doc");
         assertEqualsIgnoreNewline("Check Request", doc.getRange().text());
     }
-    
+
     /**
      * Bug 61268 - NegativeArraySizeException parsing word 97 document
      */
@@ -774,7 +772,7 @@ public class TestBugs{
                 }
                 else if(para.text().trim().equals("Section2")) {
                     assertSection2Margin(section);
-                    
+
                     // Change the margin widths
                     this.section2BottomMargin = (int)(1.5 * AbstractWordUtils.TWIPS_PER_INCH);
                     this.section2TopMargin = (int)(1.75 * AbstractWordUtils.TWIPS_PER_INCH);
@@ -787,7 +785,7 @@ public class TestBugs{
                 }
             }
         }
-        
+
         // Save away and re-read the document to prove the changes are permanent
         document = HWPFTestDataSamples.writeOutAndReadBack(document);
         overallRange = document.getOverallRange();
@@ -849,8 +847,8 @@ public class TestBugs{
         hwpfDocument2.close();
         hwpfDocument.close();
     }
-    
-    @Test(expected=ArrayIndexOutOfBoundsException.class)
+
+    @Test
     public void test57843() throws IOException {
         File f = POIDataSamples.getDocumentInstance().getFile("57843.doc");
         try (POIFSFileSystem fs = new POIFSFileSystem(f, true)) {