I modify the file ListLevel.java.
When parsing some doc files, the _numberText might be below zero (I don't
why) and then cause error, such as
java.lang.NegativeArraySizeException
at org.apache.poi.hwpf.model.ListLevel.<init>(ListLevel.java:115)
at
org.apache.poi.hwpf.model.ListFormatOverrideLevel.<init>(ListFormatOverrideL
evel.java:48)
at org.apache.poi.hwpf.model.ListTables.<init>(ListTables.java:85)
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:172)
.............
So I add some handle about _numberText.
? mypatch.patch
Index: ListLevel.java
===================================================================
RCS file:
/home/cvspublic/jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/Lis
tLevel.java,v
retrieving revision 1.3
diff -u -r1.3 ListLevel.java
--- ListLevel.java 24 Aug 2004 12:53:59 -0000 1.3
+++ ListLevel.java 25 Jan 2005 12:28:49 -0000
@@ -49,7 +49,7 @@
private short _reserved;
private byte[] _grpprlPapx;
private byte[] _grpprlChpx;
- private char[] _numberText;
+ private char[] _numberText=null;
public ListLevel(int startAt, int numberFormatCode, int alignment,
byte[] numberProperties, byte[] entryProperties,
@@ -111,13 +111,18 @@
System.arraycopy(buf, offset, _grpprlChpx, 0, _cbGrpprlChpx);
offset += _cbGrpprlChpx;
- int numberTextLength = LittleEndian.getShort(buf, offset);
- _numberText = new char[numberTextLength];
- offset += LittleEndian.SHORT_SIZE;
- for (int x = 0; x < numberTextLength; x++)
- {
- _numberText[x] = (char)LittleEndian.getShort(buf, offset);
- offset += LittleEndian.SHORT_SIZE;
+ int numberTextLength = LittleEndian.getShort(buf, offset);
+ /* sometimes numberTextLength<0 */
+ /* by derjohng */
+ if (numberTextLength>0)
+ {
+ _numberText = new char[numberTextLength];
+ offset += LittleEndian.SHORT_SIZE;
+ for (int x = 0; x < numberTextLength; x++)
+ {
+ _numberText[x] = (char)LittleEndian.getShort(buf, offset);
+ offset += LittleEndian.SHORT_SIZE;
+ }
}
}
@@ -230,7 +235,12 @@
}
public int getSizeInBytes()
{
- return 28 + _cbGrpprlChpx + _cbGrpprlPapx + (_numberText.length *
LittleEndian.SHORT_SIZE) + 2;
+ if (_numberText!=null)
+ {
+ return 28 + _cbGrpprlChpx + _cbGrpprlPapx + (_numberText.length
* LittleEndian.SHORT_SIZE) + 2;
+ } else {
+ return 28 + _cbGrpprlChpx + _cbGrpprlPapx + 2;
+ }
}
}
===============================================================
Best regards,
Der-Johng Sun (derjohng)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/