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"));
         }
     }
+    
 }