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]