You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ga...@apache.org on 2019/01/04 10:10:31 UTC
svn commit: r1850342 - in /poi/trunk/src:
ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
testcases/org/apache/poi/ss/usermodel/BaseTestCell.java
Author: gallon
Date: Fri Jan 4 10:10:30 2019
New Revision: 1850342
URL: http://svn.apache.org/viewvc?rev=1850342&view=rev
Log:
Bug 63057: made SXSSFCell.setCellValue(String|RichTextString) exception-safe.
Also removed unused code.
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java?rev=1850342&r1=1850341&r2=1850342&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java Fri Jan 4 10:10:30 2019
@@ -274,19 +274,17 @@ public class SXSSFCell implements Cell {
@Override
public void setCellValue(RichTextString value)
{
- XSSFRichTextString xvalue = (XSSFRichTextString)value;
-
- if (xvalue != null && xvalue.getString() != null) {
- ensureRichTextStringType();
-
- if (xvalue.length() > SpreadsheetVersion.EXCEL2007.getMaxTextLength()) {
+ if (value != null && value.getString() != null) {
+ if (value.length() > SpreadsheetVersion.EXCEL2007.getMaxTextLength()) {
throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters");
}
+ ensureRichTextStringType();
+
if(_value instanceof RichTextStringFormulaValue) {
- ((RichTextStringFormulaValue) _value).setPreEvaluatedValue(xvalue);
+ ((RichTextStringFormulaValue) _value).setPreEvaluatedValue(value);
} else {
- ((RichTextValue) _value).setValue(xvalue);
+ ((RichTextValue) _value).setValue(value);
}
} else {
setCellType(CellType.BLANK);
@@ -305,22 +303,17 @@ public class SXSSFCell implements Cell {
public void setCellValue(String value)
{
if (value != null) {
- ensureTypeOrFormulaType(CellType.STRING);
-
if (value.length() > SpreadsheetVersion.EXCEL2007.getMaxTextLength()) {
throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters");
}
-
- if(_value.getType()==CellType.FORMULA)
- if(_value instanceof NumericFormulaValue) {
- ((NumericFormulaValue) _value).setPreEvaluatedValue(Double.parseDouble(value));
- } else if(_value instanceof RichTextStringFormulaValue) {
- ((RichTextStringFormulaValue) _value).setPreEvaluatedValue(new XSSFRichTextString(value));
- } else {
- ((StringFormulaValue) _value).setPreEvaluatedValue(value);
- }
- else
- ((PlainStringValue)_value).setValue(value);
+
+ ensureTypeOrFormulaType(CellType.STRING);
+
+ if(_value.getType() == CellType.FORMULA) {
+ ((StringFormulaValue) _value).setPreEvaluatedValue(value);
+ } else {
+ ((PlainStringValue) _value).setValue(value);
+ }
} else {
setCellType(CellType.BLANK);
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java?rev=1850342&r1=1850341&r2=1850342&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java Fri Jan 4 10:10:30 2019
@@ -1156,4 +1156,47 @@ public abstract class BaseTestCell {
boolean result = cell.getBooleanCellValue();
assertFalse(result);
}
+
+ @Test
+ public void setStringCellValue_ifThrows_shallNotChangeCell() {
+ Cell cell = _testDataProvider.createWorkbook().createSheet().createRow(0).createCell(0);
+
+ final double value = 2.78;
+ cell.setCellValue(value);
+ assertEquals(CellType.NUMERIC, cell.getCellType());
+
+ int badLength = cell.getSheet().getWorkbook().getSpreadsheetVersion().getMaxTextLength() + 1;
+ String badStringValue = new String(new byte[badLength]);
+
+ try {
+ cell.setCellValue(badStringValue);
+ } catch (IllegalArgumentException e) {
+ // no-op, expected to throw but we need to assert something more
+ }
+
+ assertEquals(CellType.NUMERIC, cell.getCellType());
+ assertEquals(value, cell.getNumericCellValue(), 0);
+ }
+
+ @Test
+ public void setStringCellValueWithRichTextString_ifThrows_shallNotChangeCell() {
+ Cell cell = _testDataProvider.createWorkbook().createSheet().createRow(0).createCell(0);
+
+ final double value = 2.78;
+ cell.setCellValue(value);
+ assertEquals(CellType.NUMERIC, cell.getCellType());
+
+ int badLength = cell.getSheet().getWorkbook().getSpreadsheetVersion().getMaxTextLength() + 1;
+ RichTextString badStringValue = cell.getSheet().getWorkbook().getCreationHelper().
+ createRichTextString(new String(new byte[badLength]));
+
+ try {
+ cell.setCellValue(badStringValue);
+ } catch (IllegalArgumentException e) {
+ // no-op, expected to throw but we need to assert something more
+ }
+
+ assertEquals(CellType.NUMERIC, cell.getCellType());
+ assertEquals(value, cell.getNumericCellValue(), 0);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org