Author: nick
Date: Tue Dec  4 03:41:11 2007
New Revision: 600896

URL: http://svn.apache.org/viewvc?rev=600896&view=rev
Log:
Workaround to avoid a NPE for Word Documents that are missing their ListTable 
(bug #44003)

Added:
    
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/ListEntryNoListTable.doc
   (with props)
    
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
   (with props)
Modified:
    poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java?rev=600896&r1=600895&r2=600896&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java 
Tue Dec  4 03:41:11 2007
@@ -23,21 +23,28 @@
 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()

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

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

Added: 
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=600896&view=auto
==============================================================================
--- 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
 (added)
+++ 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
 Tue Dec  4 03:41:11 2007
@@ -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());
+               }
+       }
+    }
+}

Propchange: 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
------------------------------------------------------------------------------
    svn:eol-style = native



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

Reply via email to