Author: nick
Date: Thu Apr 24 15:42:53 2014
New Revision: 1589770

URL: http://svn.apache.org/r1589770
Log:
Fix bug #56450 - Avoid a NPE if a comment has no associated NoteRecord (but we 
still don't know where it belongs)

Added:
    poi/trunk/test-data/spreadsheet/56450.xls   (with props)
Modified:
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java?rev=1589770&r1=1589769&r2=1589770&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java Thu Apr 
24 15:42:53 2014
@@ -16,8 +16,18 @@
 ==================================================================== */
 package org.apache.poi.hssf.usermodel;
 
-import org.apache.poi.ddf.*;
-import org.apache.poi.hssf.record.*;
+import org.apache.poi.ddf.DefaultEscherRecordFactory;
+import org.apache.poi.ddf.EscherBSERecord;
+import org.apache.poi.ddf.EscherContainerRecord;
+import org.apache.poi.ddf.EscherOptRecord;
+import org.apache.poi.ddf.EscherProperties;
+import org.apache.poi.ddf.EscherSimpleProperty;
+import org.apache.poi.hssf.record.CommonObjectDataSubRecord;
+import org.apache.poi.hssf.record.EndSubRecord;
+import org.apache.poi.hssf.record.NoteRecord;
+import org.apache.poi.hssf.record.NoteStructureSubRecord;
+import org.apache.poi.hssf.record.ObjRecord;
+import org.apache.poi.hssf.record.TextObjectRecord;
 import org.apache.poi.ss.usermodel.Comment;
 
 /**
@@ -211,6 +221,15 @@ public class HSSFComment extends HSSFTex
     protected NoteRecord getNoteRecord() {
         return _note;
     }
+    
+    /**
+     * Do we know which cell this comment belongs to?
+     */
+    public boolean hasPosition() {
+        if (_note == null) return false;
+        if (getColumn() < 0 || getRow() < 0) return false;
+        return true;
+    }
 
     @Override
     public void setShapeType(int shapeType) {

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java?rev=1589770&r1=1589769&r2=1589770&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java Thu Apr 24 
15:42:53 2014
@@ -28,7 +28,20 @@ import org.apache.poi.hssf.model.Drawing
 import org.apache.poi.hssf.model.HSSFFormulaParser;
 import org.apache.poi.hssf.model.InternalSheet;
 import org.apache.poi.hssf.model.InternalWorkbook;
-import org.apache.poi.hssf.record.*;
+import org.apache.poi.hssf.record.AutoFilterInfoRecord;
+import org.apache.poi.hssf.record.CellValueRecordInterface;
+import org.apache.poi.hssf.record.DVRecord;
+import org.apache.poi.hssf.record.DimensionsRecord;
+import org.apache.poi.hssf.record.DrawingRecord;
+import org.apache.poi.hssf.record.EscherAggregate;
+import org.apache.poi.hssf.record.ExtendedFormatRecord;
+import org.apache.poi.hssf.record.NameRecord;
+import org.apache.poi.hssf.record.NoteRecord;
+import org.apache.poi.hssf.record.Record;
+import org.apache.poi.hssf.record.RowRecord;
+import org.apache.poi.hssf.record.SCLRecord;
+import org.apache.poi.hssf.record.WSBoolRecord;
+import org.apache.poi.hssf.record.WindowTwoRecord;
 import org.apache.poi.hssf.record.aggregates.DataValidityTable;
 import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate;
 import org.apache.poi.hssf.record.aggregates.WorksheetProtectionBlock;
@@ -2115,7 +2128,7 @@ public final class HSSFSheet implements 
             }
             if (shape instanceof HSSFComment) {
                 HSSFComment comment = (HSSFComment) shape;
-                if (comment.getColumn() == column && comment.getRow() == row) {
+                if (comment.hasPosition() && comment.getColumn() == column && 
comment.getRow() == row) {
                     return comment;
                 }
             }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java?rev=1589770&r1=1589769&r2=1589770&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java 
(original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java Thu Apr 
24 15:42:53 2014
@@ -2549,4 +2549,20 @@ public final class TestBugs extends Base
         assertAlmostEquals(1950, s.getColumnWidth(10), fontAccuracy);
         assertAlmostEquals(2225, s.getColumnWidth(11), fontAccuracy);
     }
+    
+    @Test
+    public void bug56450() {
+        HSSFWorkbook wb = openSample("56450.xls");
+        HSSFSheet sheet = wb.getSheetAt(0);
+        int comments = 0;
+        for (Row r : sheet) {
+            for (Cell c : r) {
+                if (c.getCellComment() != null) {
+                    assertNotNull(c.getCellComment().getString().getString());
+                    comments++;
+                }
+            }
+        }
+        assertEquals(0, comments);
+    }
 }

Added: poi/trunk/test-data/spreadsheet/56450.xls
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/56450.xls?rev=1589770&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/56450.xls
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to