From 3351df0d1bd253dccca0db46031526cc2b964dd0 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 18 Feb 2011 15:29:22 +0000 Subject: [PATCH] Fix bug #50795 - Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1072022 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../poi/xssf/usermodel/XSSFComment.java | 11 +++- .../poi/xssf/usermodel/TestXSSFBugs.java | 52 ++++++++++++++++++ test-data/spreadsheet/50795.xlsx | Bin 0 -> 11594 bytes 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 test-data/spreadsheet/50795.xlsx diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index ef158f1f9..44524a32a 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 50795 - Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another 46664 - When creating HSSF Print Areas, ensure the named range is reference based not value based 50756 - When formatting numbers based on their Cell Style, treat GENERAL the same as the more typical General fixed HSSFWorkbook.createCellStyle to throw exception if the maximum number of cell styles was exceeded diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java index 9d6c34cd4..f75b25062 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java @@ -116,7 +116,16 @@ public class XSSFComment implements Comment { _comment.setRef(ref.formatAsString()); _comments.referenceUpdated(oldRef, _comment); - if(_vmlShape != null) _vmlShape.getClientDataArray(0).setColumnArray(0, new BigInteger(String.valueOf(col))); + if(_vmlShape != null) { + _vmlShape.getClientDataArray(0).setColumnArray( + new BigInteger[] { new BigInteger(String.valueOf(col)) } + ); + + // There is a very odd xmlbeans bug when changing the column + // arrays which can lead to corrupt pointer + // This call seems to fix them again... See bug #50795 + _vmlShape.getClientDataList().toString(); + } } /** diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index b45a5df6c..abc9fc73b 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -620,4 +620,56 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { assertEquals("SUM(\n1,2\n)", c.getCellFormula()); assertEquals(3.0, c.getNumericCellValue()); } + + /** + * Moving a cell comment from one cell to another + */ + public void test50795() throws Exception { + XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50795.xlsx"); + XSSFSheet sheet = wb.getSheetAt(0); + XSSFRow row = sheet.getRow(0); + + XSSFCell cellWith = row.getCell(0); + XSSFCell cellWithoutComment = row.getCell(1); + + assertNotNull(cellWith.getCellComment()); + assertNull(cellWithoutComment.getCellComment()); + + String exp = "\u0410\u0432\u0442\u043e\u0440:\ncomment"; + XSSFComment comment = cellWith.getCellComment(); + assertEquals(exp, comment.getString().getString()); + + + // Check we can write it out and read it back as-is + wb = XSSFTestDataSamples.writeOutAndReadBack(wb); + sheet = wb.getSheetAt(0); + row = sheet.getRow(0); + cellWith = row.getCell(0); + cellWithoutComment = row.getCell(1); + + // Double check things are as expected + assertNotNull(cellWith.getCellComment()); + assertNull(cellWithoutComment.getCellComment()); + comment = cellWith.getCellComment(); + assertEquals(exp, comment.getString().getString()); + + + // Move the comment + cellWithoutComment.setCellComment(comment); + + + // Write out and re-check + wb = XSSFTestDataSamples.writeOutAndReadBack(wb); + sheet = wb.getSheetAt(0); + row = sheet.getRow(0); + + // Ensure it swapped over + cellWith = row.getCell(0); + cellWithoutComment = row.getCell(1); + assertNull(cellWith.getCellComment()); + assertNotNull(cellWithoutComment.getCellComment()); + + comment = cellWithoutComment.getCellComment(); + assertEquals(exp, comment.getString().getString()); + } } diff --git a/test-data/spreadsheet/50795.xlsx b/test-data/spreadsheet/50795.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a58aeec7cc564bdf18b9bfe0a4325826955e81b4 GIT binary patch literal 11594 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 Of}j9^>ibF%@P7b$N>G{r literal 0 HcmV?d00001