aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPJ Fanning <fanningpj@apache.org>2020-07-13 17:34:09 +0000
committerPJ Fanning <fanningpj@apache.org>2020-07-13 17:34:09 +0000
commitaf83fda6b896181da4a28b9ed8b4d8e5ee7242c1 (patch)
treef51d93e56d9561919f912f63318187bc08b07834
parentabdd50a4d1a9fb4d82ceb9de0a1aa7475dd88fe0 (diff)
downloadpoi-af83fda6b896181da4a28b9ed8b4d8e5ee7242c1.tar.gz
poi-af83fda6b896181da4a28b9ed8b4d8e5ee7242c1.zip
[bug-64595] SXSSF: Missing quoting of pre-evaluated string values in formula cells causes corrupt files. Thanks to Bastian Isensee
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1879834 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java6
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java26
2 files changed, 29 insertions, 3 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java
index 8cf5cbc0e2..524672863f 100644
--- a/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java
+++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java
@@ -298,7 +298,7 @@ public class SheetDataWriter implements Closeable {
String value = cell.getStringCellValue();
if(value != null && !value.isEmpty()) {
_out.write("<v>");
- _out.write(value);
+ outputQuotedString(value);
_out.write("</v>");
}
break;
@@ -311,7 +311,7 @@ public class SheetDataWriter implements Closeable {
FormulaError error = FormulaError.forInt(cell.getErrorCellValue());
_out.write("><v>");
- _out.write(error.getString());
+ outputQuotedString(error.getString());
_out.write("</v>");
break;
}
@@ -358,7 +358,7 @@ public class SheetDataWriter implements Closeable {
writeAttribute("t", "e");
_out.write("><v>");
- _out.write(error.getString());
+ outputQuotedString(error.getString());
_out.write("</v>");
break;
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java
index 174b1c4905..44d06dcd33 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java
@@ -238,4 +238,30 @@ public final class TestSXSSFBugs extends BaseTestBugzillaIssues {
}
}
}
+
+ @Test
+ public void test64595() throws Exception {
+ try (Workbook workbook = new SXSSFWorkbook(100)) {
+ Sheet sheet = workbook.createSheet("RawData");
+ Row row = sheet.createRow(0);
+ Cell cell;
+
+ cell = row.createCell(0);
+ cell.setCellValue("Ernie & Bert");
+
+ cell = row.createCell(1);
+ // Set a precalculated formula value containing a special character.
+ cell.setCellValue("Ernie & Bert are cool!");
+ cell.setCellFormula("A1 & \" are cool!\"");
+
+ // While unfixed reading the workbook would throw a POIXMLException
+ // since the file was corrupt due to missing quotation.
+ try (Workbook wbBack = SXSSFITestDataProvider.instance.writeOutAndReadBack(workbook)) {
+ assertNotNull(wbBack);
+ cell = wbBack.getSheetAt(0).getRow(0).getCell(1);
+ assertEquals("Ernie & Bert are cool!", cell.getStringCellValue());
+ assertEquals("A1 & \" are cool!\"", cell.getCellFormula());
+ }
+ }
+ }
}