]> source.dussan.org Git - poi.git/commitdiff
bug 45000 - Fixed NPE in ListLevel when numberText is null
authorJosh Micich <josh@apache.org>
Thu, 15 May 2008 17:49:23 +0000 (17:49 +0000)
committerJosh Micich <josh@apache.org>
Thu, 15 May 2008 17:49:23 +0000 (17:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@656757 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/changes.xml
src/documentation/content/xdocs/status.xml
src/scratchpad/src/org/apache/poi/hwpf/model/ListLevel.java

index 52e0f717561d5a2a35fdc7b5dfa5493205f95d70..2f0c4280ca8497813cbbdbea73129d4a6889f298 100644 (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>
index 6879556e8ee2cd2626446c53989904643a5dd00e..854df3b0e2b4dc0270fd3e23181f469a95155f4e 100644 (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>
index 0adfe617f16c84ce05a9d081b5c41d7206d45c95..f6b4d8594fea8ec64c70b18d20331ea18dc920cb 100644 (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
    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;
   }
 
 }