bug 45000 - Fixed NPE in ListLevel when numberText is null

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@656757 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2008-05-15 17:49:23 +00:00
parent 193ac0db79
commit 42b0a779b5
3 changed files with 39 additions and 31 deletions

View File

@ -37,6 +37,7 @@
<!-- Don't forget to update status.xml too! -->
<release version="3.1-beta2" date="2008-05-??">
<action dev="POI-DEVELOPERS" type="fix">45000 - Fixed NPE in ListLevel when numberText is null</action>
<action dev="POI-DEVELOPERS" type="fix">44985 - Properly update TextSpecInfoAtom when the parent text is changed</action>
<action dev="POI-DEVELOPERS" type="fix">41187 - fixed HSSFSheet to properly read xls files without ROW records</action>
<action dev="POI-DEVELOPERS" type="fix">44950 - fixed HSSFFormulaEvaluator.evaluateInCell() and Area3DEval.getValue() also added validation for number of elements in AreaEvals</action>

View File

@ -34,6 +34,7 @@
<!-- Don't forget to update changes.xml too! -->
<changes>
<release version="3.1-beta2" date="2008-05-??">
<action dev="POI-DEVELOPERS" type="fix">45000 - Fixed NPE in ListLevel when numberText is null</action>
<action dev="POI-DEVELOPERS" type="fix">44985 - Properly update TextSpecInfoAtom when the parent text is changed</action>
<action dev="POI-DEVELOPERS" type="fix">41187 - fixed HSSFSheet to properly read xls files without ROW records</action>
<action dev="POI-DEVELOPERS" type="fix">44950 - fixed HSSFFormulaEvaluator.evaluateInCell() and Area3DEval.getValue() also added validation for number of elements in AreaEvals</action>

View File

@ -1,4 +1,3 @@
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
@ -16,22 +15,20 @@
limitations under the License.
==================================================================== */
package org.apache.poi.hwpf.model;
import java.util.Arrays;
import org.apache.poi.util.BitField;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.hwpf.usermodel.CharacterProperties;
import org.apache.poi.hwpf.usermodel.ParagraphProperties;
import org.apache.poi.hwpf.sprm.ParagraphSprmCompressor;
import org.apache.poi.hwpf.sprm.CharacterSprmCompressor;
import java.util.Arrays;
public class ListLevel
/**
*
*/
public final class ListLevel
{
private static final int RGBXCH_NUMS_SIZE = 9;
private int _iStartAt;
private byte _nfc;
private byte _info;
@ -70,7 +67,7 @@ public class ListLevel
_grpprlPapx = new byte[0];
_grpprlChpx = new byte[0];
_numberText = new char[0];
_rgbxchNums = new byte[9];
_rgbxchNums = new byte[RGBXCH_NUMS_SIZE];
if (numbered)
{
@ -90,12 +87,11 @@ public class ListLevel
_nfc = buf[offset++];
_info = buf[offset++];
_rgbxchNums = new byte[9];
for (int x = 0; x < 9; x++)
{
_rgbxchNums[x] = buf[offset++];
}
_ixchFollow = buf[offset++];
_rgbxchNums = new byte[RGBXCH_NUMS_SIZE];
System.arraycopy(buf, offset, _rgbxchNums, 0, RGBXCH_NUMS_SIZE);
offset += RGBXCH_NUMS_SIZE;
_ixchFollow = buf[offset++];
_dxaSpace = LittleEndian.getInt(buf, offset);
offset += LittleEndian.INT_SIZE;
_dxaIndent = LittleEndian.getInt(buf, offset);
@ -207,8 +203,8 @@ public class ListLevel
offset += LittleEndian.INT_SIZE;
buf[offset++] = _nfc;
buf[offset++] = _info;
System.arraycopy(_rgbxchNums, 0, buf, offset, _rgbxchNums.length);
offset += _rgbxchNums.length;
System.arraycopy(_rgbxchNums, 0, buf, offset, RGBXCH_NUMS_SIZE);
offset += RGBXCH_NUMS_SIZE;
buf[offset++] = _ixchFollow;
LittleEndian.putInt(buf, offset, _dxaSpace);
offset += LittleEndian.INT_SIZE;
@ -225,23 +221,33 @@ public class ListLevel
System.arraycopy(_grpprlPapx, 0, buf, offset, _cbGrpprlPapx);
offset += _cbGrpprlPapx;
LittleEndian.putShort(buf, offset, (short)_numberText.length);
offset += LittleEndian.SHORT_SIZE;
for (int x = 0; x < _numberText.length; x++)
{
LittleEndian.putShort(buf, offset, (short)_numberText[x]);
if (_numberText == null) {
// TODO - write junit to test this flow
LittleEndian.putUShort(buf, offset, 0);
} else {
LittleEndian.putUShort(buf, offset, _numberText.length);
offset += LittleEndian.SHORT_SIZE;
for (int x = 0; x < _numberText.length; x++)
{
LittleEndian.putUShort(buf, offset, _numberText[x]);
offset += LittleEndian.SHORT_SIZE;
}
}
return buf;
}
public int getSizeInBytes()
{
if (_numberText!=null)
{
return 28 + _cbGrpprlChpx + _cbGrpprlPapx + (_numberText.length * LittleEndian.SHORT_SIZE) + 2;
} else {
return 28 + _cbGrpprlChpx + _cbGrpprlPapx + 2;
}
int result =
6 // int byte byte
+ RGBXCH_NUMS_SIZE
+ 13 // byte int int byte byte short
+ _cbGrpprlChpx
+ _cbGrpprlPapx
+ 2; // numberText length
if (_numberText != null) {
result += _numberText.length * LittleEndian.SHORT_SIZE;
}
return result;
}
}