]> source.dussan.org Git - poi.git/commitdiff
Workaround to avoid a NPE for Word Documents that are missing their ListTable (bug...
authorNick Burch <nick@apache.org>
Tue, 4 Dec 2007 11:41:11 +0000 (11:41 +0000)
committerNick Burch <nick@apache.org>
Tue, 4 Dec 2007 11:41:11 +0000 (11:41 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@600896 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java
src/scratchpad/testcases/org/apache/poi/hwpf/data/ListEntryNoListTable.doc [new file with mode: 0644]
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java [new file with mode: 0644]

index 1b0ba626c20c2fc2e8dc63662e7dc598d5b88a0d..9bafce792761a3e6c6fb604d28e7f4b0693632f3 100644 (file)
@@ -23,21 +23,28 @@ import org.apache.poi.hwpf.model.ListFormatOverrideLevel;
 import org.apache.poi.hwpf.model.ListLevel;
 import org.apache.poi.hwpf.model.ListTables;
 import org.apache.poi.hwpf.model.PAPX;
-
-import org.apache.poi.hwpf.sprm.SprmBuffer;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
 
 public class ListEntry
   extends Paragraph
 {
-  ListLevel _level;
-  ListFormatOverrideLevel _overrideLevel;
+       private static POILogger log = POILogFactory.getLogger(ListEntry.class);
+       
+       ListLevel _level;
+       ListFormatOverrideLevel _overrideLevel;
 
   ListEntry(PAPX papx, Range parent, ListTables tables)
   {
     super(papx, parent);
-    ListFormatOverride override = tables.getOverride(_props.getIlfo());
-    _overrideLevel = override.getOverrideLevel(_props.getIlvl());
-    _level = tables.getLevel(override.getLsid(), _props.getIlvl());
+    
+    if(tables != null) {
+           ListFormatOverride override = tables.getOverride(_props.getIlfo());
+           _overrideLevel = override.getOverrideLevel(_props.getIlvl());
+           _level = tables.getLevel(override.getLsid(), _props.getIlvl());
+    } else {
+       log.log(POILogger.WARN, "No ListTables found for ListEntry - document probably partly corrupt, and you may experience problems");
+    }
   }
 
   public int type()
diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/data/ListEntryNoListTable.doc b/src/scratchpad/testcases/org/apache/poi/hwpf/data/ListEntryNoListTable.doc
new file mode 100644 (file)
index 0000000..939f5a4
Binary files /dev/null and b/src/scratchpad/testcases/org/apache/poi/hwpf/data/ListEntryNoListTable.doc differ
diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
new file mode 100644 (file)
index 0000000..87b9754
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.poi.hwpf.usermodel;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.model.StyleSheet;
+import org.apache.poi.hwpf.model.TextPiece;
+import org.apache.poi.hwpf.usermodel.Paragraph;
+import org.apache.poi.hwpf.usermodel.Range;
+import org.apache.poi.util.LittleEndian;
+
+import junit.framework.TestCase;
+
+/**
+ * Test various problem documents
+ *
+ * @author Nick Burch (nick at torchbox dot com)
+ */
+public class TestProblems extends TestCase {
+       private String dirname = System.getProperty("HWPF.testdata.path");
+       
+    protected void setUp() throws Exception {
+    }                  
+    
+    /**
+     * ListEntry passed no ListTable
+     */
+    public void testListEntryNoListTable() throws Exception {
+       HWPFDocument doc = new HWPFDocument(new FileInputStream(dirname + "/ListEntryNoListTable.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());
+               }
+       }
+    }
+}