You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2020/07/13 17:34:09 UTC

svn commit: r1879834 - in /poi/trunk/src/ooxml: java/org/apache/poi/xssf/streaming/SheetDataWriter.java testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java

Author: fanningpj
Date: Mon Jul 13 17:34:09 2020
New Revision: 1879834

URL: http://svn.apache.org/viewvc?rev=1879834&view=rev
Log:
[bug-64595] SXSSF: Missing quoting of pre-evaluated string values in formula cells causes corrupt files. Thanks to Bastian Isensee

Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java?rev=1879834&r1=1879833&r2=1879834&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java Mon Jul 13 17:34:09 2020
@@ -298,7 +298,7 @@ public class SheetDataWriter implements
                         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
                         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
 
                 writeAttribute("t", "e");
                 _out.write("><v>");
-                _out.write(error.getString());
+                outputQuotedString(error.getString());
                 _out.write("</v>");
                 break;
             }

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java?rev=1879834&r1=1879833&r2=1879834&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java Mon Jul 13 17:34:09 2020
@@ -238,4 +238,30 @@ public final class TestSXSSFBugs extends
             }
         }
     }
+
+    @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());
+            }
+        }
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org