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:21 UTC

[commons-jexl] branch master updated (9dab666 -> 1a304ae)

This is an automated email from the ASF dual-hosted git repository.

henrib pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git.


    from 9dab666  JEXL-324: fixed grammar for new(arg, ...), made one arg mandatory - fixed debugger (belt and suspenders) Task #JEXL-324 - JexlEngine.createExpression("new()").getParsedText() throws NPE
     new c1be44c  JEXL-322: read through strings only when in expression Task #JEXL-322 - JXLT String literals cannot contain curly braces
     new 1a304ae  JEXL-324: refining parsing error reporting Task #JEXL-324 - JexlEngine.createExpression("new()").getParsedText() throws NPE

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 RELEASE-NOTES.txt                                  |  1 +
 .../commons/jexl3/internal/TemplateEngine.java     |  6 +--
 .../apache/commons/jexl3/parser/JexlParser.java    | 14 +++++++
 .../org/apache/commons/jexl3/parser/Parser.jjt     |  2 +-
 src/site/xdoc/changes.xml                          |  3 ++
 .../org/apache/commons/jexl3/Issues300Test.java    | 45 +++++++++++++++++++++-
 6 files changed, 66 insertions(+), 5 deletions(-)


[commons-jexl] 02/02: JEXL-324: refining parsing error reporting Task #JEXL-324 - JexlEngine.createExpression("new()").getParsedText() throws NPE

Posted by he...@apache.org.
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 1a304ae037c278ce2204989ecfdddf9ac449638c
Author: henrib <he...@apache.org>
AuthorDate: Tue Jan 28 11:26:59 2020 +0100

    JEXL-324: refining parsing error reporting
    Task #JEXL-324 - JexlEngine.createExpression("new()").getParsedText() throws NPE
---
 .../java/org/apache/commons/jexl3/parser/JexlParser.java   | 14 ++++++++++++++
 src/main/java/org/apache/commons/jexl3/parser/Parser.jjt   |  2 +-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java b/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
index 42fc47f..bab6c63 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
@@ -585,4 +585,18 @@ public abstract class JexlParser extends StringParser {
         // unlikely but safe
         throw xparse != null ? xparse : new JexlException.Parsing(xinfo, msg);
     }
+    
+    /**
+     * Pick the most significant token for error reporting.
+     * @param tokens the tokens to choose from
+     * @return the token
+     */
+    protected static Token errorToken(Token... tokens) {
+        for (Token token : tokens) {
+            if (token != null && token.image != null && !token.image.isEmpty()) {
+                return token;
+            }
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
index 5cbb9a6..fb5ae37 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
+++ b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
@@ -70,7 +70,7 @@ public final class Parser extends JexlParser
         } catch (TokenMgrError xtme) {
             throw new JexlException.Tokenization(info, xtme).clean();
         } catch (ParseException xparse) {
-            Token errortok = jj_lastpos != null? jj_lastpos : jj_scanpos != null ? jj_scanpos : token;
+            Token errortok = errorToken(jj_lastpos, jj_scanpos, token.next, token);
             throw new JexlException.Parsing(info.at(errortok.beginLine, errortok.beginColumn), errortok.image).clean();
         } finally {
             token_source.defaultLexState = DEFAULT;


[commons-jexl] 01/02: JEXL-322: read through strings only when in expression Task #JEXL-322 - JXLT String literals cannot contain curly braces

Posted by he...@apache.org.
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"));
         }
     }
+    
 }