? mypatch.patch Index: ListLevel.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/ListLevel.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; + } } }