From 7ba2f0fffa225b3b76bb87895957254a30157595 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Mon, 26 Dec 2022 16:15:39 +0000 Subject: [PATCH] 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 --- .../org/apache/poi/ss/formula/FormulaParser.java | 1 + .../apache/poi/hssf/model/TestFormulaParser.java | 13 ++++++++++++- .../apache/poi/sl/draw/geom/TestFormulaParser.java | 3 --- 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(){