From 0736691ba1ffb6a2318165331f7ef2ee9fda374f Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Tue, 4 Dec 2007 11:41:11 +0000 Subject: [PATCH] Workaround to avoid a NPE for Word Documents that are missing their ListTable (bug #44003) git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@600896 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hwpf/usermodel/ListEntry.java | 21 ++++-- .../poi/hwpf/data/ListEntryNoListTable.doc | Bin 0 -> 19456 bytes .../poi/hwpf/usermodel/TestProblems.java | 60 ++++++++++++++++++ 3 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 src/scratchpad/testcases/org/apache/poi/hwpf/data/ListEntryNoListTable.doc create mode 100644 src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java index 1b0ba626c2..9bafce7927 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ListEntry.java @@ -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 index 0000000000000000000000000000000000000000..939f5a4a9efe5b99586e4b96935700306c392ec8 GIT binary patch literal 19456 zcmeHPU2GIp6h1S%TekFv($-Qy%21YKBH2(1TI45%B2*$!p^7F(*licu+U=C>R>AmC z{G~>d8Xm+b3b7gui77&iMiVtb!izr-V&uUD(L_zq0Ko?^bp5`Wy=A+&Wg%)1?n%y^ z`*ZF&_kMF{cFvtU`}J4jkMG?-=?6)p#p02nM6Tqdlp9D-Q~4s1=}5C|D3M68*a9P| z>3@X4$u~cfRaUN74-zVw@iZhBE9Qf=6o29 z5{Yrc)tS;tp~FcmG~GO9YMP~gmoIhIonu$B?TJw&IxoMYo>J-m=n;7z`5Z{n)ygp1 z({)SIPBt?x_rU9F3HyV0&J zrJd4Cm+5xW^Ta2WRQuGjY|^Tovd4TQ8me+-JU-Ey zd&J;;iovLwe@aiaQ~sFe{5t?S8@UjDp3 zhp9)Eihw`bkn8ORd-ywVfc@aqd2k_BJ#%KnY#E`J+FqxxH3SSij!~SDUq@GDQJ^%Sn*L*D^hnlVM;9`lN?zsHX@m*goIH!Zvy2~zp`95G#K6xBpxRG zc$o0V8}j)CnMQMDN!^*mUYP@1;}MzJu+k>Y62W>=7i`8LTjW>SgmjO@N3?F2p*5!y zXQUlJQ-x^5esoE<(}L~eu(H)TicIDR0-kYC9ru(BER<4kbwD0MHWcv4R9UmqlzYJJ zb+kdeonY1L9={=L;mg42)}o)e(uCfGsOWz`w1bv!|8vqu>&^qQhK`qY1((~HUO7`!?UFDklE*3?Jvpuu3&dj zxMXJ8$@2Y^AE{U{O#+`+jlc!Ye?~#czylcPR=GVOwE<}e;Jl0+<;C;D(Vb3I8XO&a z!coOAs*yd(M+AuxmJFN{45&ip`L{3dZ_i|tU78N|IRUKKS^G1P_gaaBA(d5cP{AQ; zT_o!G!MWf{@C@)SuoM1L_L8$JskVw3G?RMCm$nkjNk%r#>`ta3hF7@Id-R;Mx&X5? zgxM8$=9z_=VB;J`fKwbR9xE^#9>lzeI2x8L#cbV-Ik?1`#m&-+njmJfjd@Dqs7Q%A zqn9IgY1b=Dod++KSJK1-nL~uCk@(cHTWmN+?v+k?7;MXIMUEmBK!yXgDw*byQwn9bULUhZpwHLmJ17Tb`}Sg7 zaN}hnrn=zx&k!%a^UjI#&v|kS&y$*&nd~PLToeJ)&)dYc!9J~OYmV97_NKVC-j20c^Me4b4&^ei^IM8K9$s6#c~8v| z!%08aS;n`;#E*TZB&AEYR39}08Uc-fMnEH=5zq)|1T+E~0gZr0KqGK<2#gm0n@7Jm z`f6};(ax6;|Ia%2E<#y331*DWShW?*xV#I@c)u6Scz*|&YXtq^31F@dFs9xEE&{&| zW~@92=1%etz>N1l1=IGIV8+!duBYt=I~tL;cq}zePLG#=E6jELKs}?ZKnK{4_G=^` zIi?ulv*%6l5OHE}>S)pkXaqC@8Uc-fMnEH=5zq)|1T+E~0gb@*f`E#J8CUb&J!5S~ z!hB!P|8?MddcK=y{La{%aXR0HGwx?S<9xouXFSiZ@A;)VV|vE@tmg*NN#M!go554S zjJBtOS$_dsnM^ZJ*7V;Yz&-9Z_P1MdCpLKVn}BUN8`)DCc8{puat`I>ay`Xe%Yj(# zWRi#3o@bmd;{(X|Cd;amUs||dLL>{XKonyAM){}ArYZNJs4eU3G5Q#`GB1N{#*Th& zekTsu(j+krUNfo>*|t;ueb_2buiRiy?C*m2O-`R!!tXR}XXAY)ySKnU5$Cm=?fAI{ zchP_P$giwFweYXTo~{4#6#s_QV}wzxA+Eva0`081A}WS|-otp$%GN&}C{M1}2+n=n z`8LV@V1XLhQ5jYfFE@TQ@0HBXa`sx6^FNv;VyEx9sR-U!X#;29gCBT~I{n_w>vWmj s+!Kv-#;uVX+ni^DRqMFN4I0kPgz2DC57x@r`R{ERZRY8^YXO1304zg7d;kCd literal 0 HcmV?d00001 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 index 0000000000..87b9754a62 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java @@ -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()); + } + } + } +} -- 2.39.5