You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2020/01/28 10:29:22 UTC
[commons-jexl] 01/02: JEXL-322: read through strings only when in
expression Task #JEXL-322 - JXLT String literals cannot contain curly
braces
This is an automated email from the ASF dual-hosted git repository.
henrib pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git
commit c1be44c091fbd47d431c0b6045e555b0b4686b30
Author: henrib <he...@apache.org>
AuthorDate: Tue Jan 28 08:35:44 2020 +0100
JEXL-322: read through strings only when in expression
Task #JEXL-322 - JXLT String literals cannot contain curly braces
---
RELEASE-NOTES.txt | 1 +
.../commons/jexl3/internal/TemplateEngine.java | 6 +--
src/site/xdoc/changes.xml | 3 ++
.../org/apache/commons/jexl3/Issues300Test.java | 45 +++++++++++++++++++++-
4 files changed, 51 insertions(+), 4 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index cfdb516..fbdc74e 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -74,6 +74,7 @@ New Features in 3.2:
Bugs Fixed in 3.2:
==================
+* JEXL-324: JexlEngine.createExpression("new()").getParsedText() throws NPE
* JEXL-322: JXLT String literals cannot contain curly brace
* JEXL-321: Empty do-while loop is broken
* JEXL-320: "mvn test" fails with COMPILATION ERROR in SynchronizedArithmetic.java on Java 11
diff --git a/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java b/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
index 056c2cc..8f1a7ea 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
@@ -786,7 +786,7 @@ public final class TemplateEngine extends JxltEngine {
state = ParseState.ESCAPE;
} else {
// do buildup expr
- column = append(strb, expr, column, c);
+ strb.append(c);
}
break;
case IMMEDIATE0: // $
@@ -801,7 +801,7 @@ public final class TemplateEngine extends JxltEngine {
} else {
// revert to CONST
strb.append(immediateChar);
- column = append(strb, expr, column, c);
+ strb.append(c);
state = ParseState.CONST;
}
break;
@@ -817,7 +817,7 @@ public final class TemplateEngine extends JxltEngine {
} else {
// revert to CONST
strb.append(deferredChar);
- column = append(strb, expr, column, c);
+ strb.append(c);
state = ParseState.CONST;
}
break;
diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml
index 6c4793b..c85438c 100644
--- a/src/site/xdoc/changes.xml
+++ b/src/site/xdoc/changes.xml
@@ -26,6 +26,9 @@
</properties>
<body>
<release version="3.2" date="unreleased">
+ <action dev="henrib" type="fix" issue="JEXL-324" due-to="David Costanzo">
+ JexlEngine.createExpression("new()").getParsedText() throws NPE
+ </action>
<action dev="henrib" type="fix" issue="JEXL-322" due-to="Constantin Hirsch">
JXLT String literals cannot contain curly braces
</action>
diff --git a/src/test/java/org/apache/commons/jexl3/Issues300Test.java b/src/test/java/org/apache/commons/jexl3/Issues300Test.java
index a7b5904..f4c260f 100644
--- a/src/test/java/org/apache/commons/jexl3/Issues300Test.java
+++ b/src/test/java/org/apache/commons/jexl3/Issues300Test.java
@@ -349,7 +349,7 @@ public class Issues300Test {
}
@Test
- public void test322() throws Exception {
+ public void test322a() throws Exception {
JexlEngine jexl = new JexlBuilder().strict(true).create();
JxltEngine jxlt = jexl.createJxltEngine();
JexlContext context = new MapContext();
@@ -379,6 +379,48 @@ public class Issues300Test {
}
}
+ public static class User322 {
+ public String getName() {
+ return "user322";
+ }
+ }
+
+ public static class Session322 {
+ public User322 getUser() {
+ return new User322();
+ }
+ }
+
+ @Test
+ public void test322b() throws Exception {
+ MapContext ctxt = new MapContext();
+ String src = "L'utilisateur ${session.user.name} s'est connecte";
+ JexlEngine jexl = new JexlBuilder().strict(true).create();
+ JxltEngine jxlt = jexl.createJxltEngine();
+ StringWriter strw;
+ JxltEngine.Template template;
+ String output;
+ template = jxlt.createTemplate("$$", new StringReader(src));
+
+ ctxt.set("session", new Session322());
+ strw = new StringWriter();
+ template.evaluate(ctxt, strw);
+ output = strw.toString();
+ Assert.assertEquals("L'utilisateur user322 s'est connecte", output);
+
+ ctxt.set("session.user", new User322());
+ strw = new StringWriter();
+ template.evaluate(ctxt, strw);
+ output = strw.toString();
+ Assert.assertEquals("L'utilisateur user322 s'est connecte", output);
+
+ ctxt.set("session.user.name", "user322");
+ strw = new StringWriter();
+ template.evaluate(ctxt, strw);
+ output = strw.toString();
+ Assert.assertEquals("L'utilisateur user322 s'est connecte", output);
+ }
+
@Ignore
public void test323() throws Exception {
// Create or retrieve an engine
@@ -416,4 +458,5 @@ public class Issues300Test {
Assert.assertTrue(xparse.toString().contains("new"));
}
}
+
}