Author: fanningpj
Date: Thu Aug 10 09:38:39 2023
New Revision: 1911589

URL: http://svn.apache.org/viewvc?rev=1911589&view=rev
Log:
[bug-66855] Formula parser incorrectly handles sheet name containing multiple 
single quotes in a row. Thanks to Kirill lebedev. This closes #496

Modified:
    poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java
    poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java

Modified: 
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java?rev=1911589&r1=1911588&r2=1911589&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java 
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java 
Thu Aug 10 09:38:39 2023
@@ -1182,8 +1182,6 @@ public final class FormulaParser {
                         if (look == '\''){
                             // Any single quotes which were already present in 
the sheet name will be converted to double single quotes ('')
                             // so switch back to single quote
-                            sb.appendCodePoint(look);
-                            nextChar();
                             break;
                         }
                     }

Modified: 
poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java?rev=1911589&r1=1911588&r2=1911589&view=diff
==============================================================================
--- 
poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java 
(original)
+++ 
poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java 
Thu Aug 10 09:38:39 2023
@@ -1372,6 +1372,22 @@ final class TestFormulaParser {
     }
 
     @Test
+    void testParseSheetNameWithMultipleSingleQuotes() throws IOException {
+        try (HSSFWorkbook wb = new HSSFWorkbook()) {
+            wb.createSheet("Sh''t1");
+            Ptg[] ptgs = parse("'Sh''''t1'!$A:$A,'Sh''''t1'!$1:$4", wb);
+            confirmTokenClasses(ptgs,
+                    MemFuncPtg.class,
+                    Area3DPtg.class,
+                    Area3DPtg.class,
+                    UnionPtg.class
+            );
+            assertEquals(0, ((Area3DPtg)ptgs[1]).getExternSheetIndex());
+            assertEquals(0, ((Area3DPtg)ptgs[2]).getExternSheetIndex());
+        }
+    }
+
+    @Test
     void testExplicitRangeWithTwoSheetNames() throws IOException {
         HSSFWorkbook wb = new HSSFWorkbook();
         wb.createSheet("Sheet1");



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

Reply via email to