]> source.dussan.org Git - poi.git/commitdiff
Bug 61911: Avoid IndexOutOfBounds access when reading pictures
authorDominik Stadler <centic@apache.org>
Thu, 28 Dec 2017 08:45:36 +0000 (08:45 +0000)
committerDominik Stadler <centic@apache.org>
Thu, 28 Dec 2017 08:45:36 +0000 (08:45 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1819403 13f79535-47bb-0310-9956-ffa450edef68

src/integrationtest/org/apache/poi/hssf/usermodel/RecordsStresser.java
src/integrationtest/org/apache/poi/stress/HWPFFileHandler.java
src/scratchpad/src/org/apache/poi/hwpf/model/StyleSheet.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java
test-data/document/61911.doc [new file with mode: 0644]

index 1b712f788eeda60bc299af66e81caa9dae9a5937..7367757f48982f8b749bba90f9c0cae92f1a20bb 100644 (file)
@@ -68,13 +68,10 @@ public class RecordsStresser {
     // a test-case to test this locally without executing the full TestAllFiles
     @Test
     public void test() throws Exception {
-        InputStream stream = new FileInputStream("test-data/spreadsheet/15556.xls");
-        try {
+        try (InputStream stream = new FileInputStream("test-data/spreadsheet/15556.xls")) {
             HSSFWorkbook wb = new HSSFWorkbook(stream);
             handleWorkbook(wb);
             wb.close();
-        } finally {
-            stream.close();
         }
     }
 }
index 13e198d169902d7180e1c28b691d1578fddfabc3..59f34870c6f0b3dfb792b633011f2aa69c899b42 100644 (file)
@@ -21,9 +21,12 @@ import static org.junit.Assert.assertNotNull;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.util.List;
 
 import org.apache.poi.hwpf.HWPFDocument;
 import org.apache.poi.hwpf.extractor.WordExtractor;
+import org.apache.poi.hwpf.model.PicturesTable;
+import org.apache.poi.hwpf.usermodel.Picture;
 import org.junit.Test;
 
 public class HWPFFileHandler extends POIFSFileHandler {
@@ -33,7 +36,11 @@ public class HWPFFileHandler extends POIFSFileHandler {
         assertNotNull(doc.getBookmarks());
         assertNotNull(doc.getCharacterTable());
         assertNotNull(doc.getEndnotes());
-        
+
+        PicturesTable picturesTable = doc.getPicturesTable();
+        List<Picture> pictures = picturesTable.getAllPictures();
+        assertNotNull(pictures);
+
         handlePOIDocument(doc);
     }
 
@@ -54,11 +61,8 @@ public class HWPFFileHandler extends POIFSFileHandler {
         
         stream = new FileInputStream(file);
         try {
-            WordExtractor extractor = new WordExtractor(stream);
-            try {
+            try (WordExtractor extractor = new WordExtractor(stream)) {
                 assertNotNull(extractor.getText());
-            } finally {
-                extractor.close();
             }
         } finally {
             stream.close();
index 4f057fb3aa2eb40877622900930eae040e266588..8811bfb1f074752dfc9366dd4eb48ea1b2a524e3 100644 (file)
@@ -304,6 +304,10 @@ public final class StyleSheet {
             return NIL_CHP;
         }
 
+        if (styleIndex == -1) {
+            return NIL_CHP;
+        }
+
         return (_styleDescriptions[styleIndex] != null ? _styleDescriptions[styleIndex]
                 .getCHP() : NIL_CHP);
     }
@@ -318,6 +322,10 @@ public final class StyleSheet {
             return NIL_PAP;
         }
 
+        if (styleIndex == -1) {
+            return NIL_PAP;
+        }
+
         if (_styleDescriptions[styleIndex] == null) {
             return NIL_PAP;
         }
@@ -338,6 +346,10 @@ public final class StyleSheet {
             return NIL_CHPX;
         }
 
+        if (styleIndex == -1) {
+            return NIL_CHPX;
+        }
+
         if (_styleDescriptions[styleIndex] == null) {
             return NIL_CHPX;
         }
@@ -358,6 +370,10 @@ public final class StyleSheet {
             return NIL_PAPX;
         }
 
+        if (styleIndex == -1) {
+            return NIL_PAPX;
+        }
+
         if (_styleDescriptions[styleIndex] == null) {
             return NIL_PAPX;
         }
index 4ba83bb7674b74484fd2458ccf98ca0232fe9790..4bced587d4a6622b1172fa699f1db6eeea97423d 100644 (file)
@@ -38,10 +38,7 @@ import org.apache.poi.hwpf.converter.AbstractWordUtils;
 import org.apache.poi.hwpf.converter.WordToTextConverter;
 import org.apache.poi.hwpf.extractor.Word6Extractor;
 import org.apache.poi.hwpf.extractor.WordExtractor;
-import org.apache.poi.hwpf.model.FieldsDocumentPart;
-import org.apache.poi.hwpf.model.FileInformationBlock;
-import org.apache.poi.hwpf.model.PlexOfField;
-import org.apache.poi.hwpf.model.SubdocumentType;
+import org.apache.poi.hwpf.model.*;
 import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.util.IOUtils;
@@ -903,4 +900,17 @@ public class TestBugs{
         HWPFDocument document = HWPFTestDataSamples.openSampleFile("ca.kwsymphony.www_education_School_Concert_Seat_Booking_Form_2011-12.doc");
         document.close();
     }
+
+    @Test
+    public void test61911() throws IOException {
+        HWPFDocument document = HWPFTestDataSamples.openSampleFile("61911.doc");
+
+        PicturesTable picturesTable = document.getPicturesTable();
+        List<Picture> pictures = picturesTable.getAllPictures();
+        assertNotNull(pictures);
+        assertEquals(0, pictures.size());
+
+        document.close();
+
+    }
 }
diff --git a/test-data/document/61911.doc b/test-data/document/61911.doc
new file mode 100644 (file)
index 0000000..5d38dbe
Binary files /dev/null and b/test-data/document/61911.doc differ