aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2022-12-26 16:15:39 +0000
committerDominik Stadler <centic@apache.org>2022-12-26 16:15:39 +0000
commit7ba2f0fffa225b3b76bb87895957254a30157595 (patch)
tree821663f4b0bb45f885683b75a535e57866860532
parent971ff37eec7dea89c9cec7bbb1b6d6db90f9b59c (diff)
downloadpoi-7ba2f0fffa225b3b76bb87895957254a30157595.tar.gz
poi-7ba2f0fffa225b3b76bb87895957254a30157595.zip
Bug 66401: Handle escaped single-quote in formulas properly
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1906217 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java1
-rw-r--r--poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java13
-rw-r--r--poi/src/test/java/org/apache/poi/sl/draw/geom/TestFormulaParser.java3
3 files changed, 13 insertions, 4 deletions
diff --git a/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java b/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java
index f824ca49da..83fe1051af 100644
--- a/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java
+++ b/poi/src/main/java/org/apache/poi/ss/formula/FormulaParser.java
@@ -1182,6 +1182,7 @@ 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;
}
diff --git a/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java b/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java
index ca3d312f83..2a3cb6c98c 100644
--- a/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java
+++ b/poi/src/test/java/org/apache/poi/hssf/model/TestFormulaParser.java
@@ -645,7 +645,7 @@ final class TestFormulaParser {
assertEquals(expectedClasses.length, ptgs.length);
for (int i = 0; i < expectedClasses.length; i++) {
assertSame(expectedClasses[i], ptgs[i].getClass(),
- "difference at token[" + i + "]: expected ("
+ "difference at token[" + i + "] for Ptg " + ptgs[i] + ": expected ("
+ expectedClasses[i].getName() + ") but got ("
+ ptgs[i].getClass().getName() + ")");
}
@@ -1357,6 +1357,17 @@ final class TestFormulaParser {
UnionPtg.class
);
+ wb.createSheet("Sh't1");
+ ptgs = parse("'Sh''t1'!$A:$A,'Sh''t1'!$1:$4", wb);
+ confirmTokenClasses(ptgs,
+ MemFuncPtg.class,
+ Area3DPtg.class,
+ Area3DPtg.class,
+ UnionPtg.class
+ );
+ assertEquals(1, ((Area3DPtg)ptgs[1]).getExternSheetIndex());
+ assertEquals(1, ((Area3DPtg)ptgs[2]).getExternSheetIndex());
+
wb.close();
}
diff --git a/poi/src/test/java/org/apache/poi/sl/draw/geom/TestFormulaParser.java b/poi/src/test/java/org/apache/poi/sl/draw/geom/TestFormulaParser.java
index a4274d56da..9175a2b8f4 100644
--- a/poi/src/test/java/org/apache/poi/sl/draw/geom/TestFormulaParser.java
+++ b/poi/src/test/java/org/apache/poi/sl/draw/geom/TestFormulaParser.java
@@ -22,9 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
-/**
- * Date: 10/24/11
- */
class TestFormulaParser {
@Test
void testParse(){