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 2022/12/19 15:28:17 UTC

[commons-jexl] branch JEXL-390 created (now fe97d7c4)

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

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


      at fe97d7c4 JEXL-390: modified grammar to remove pragma declarations from statements and allow them in scripts/blocks;

This branch includes the following new commits:

     new fe97d7c4 JEXL-390: modified grammar to remove pragma declarations from statements and allow them in scripts/blocks;

The 1 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.



[commons-jexl] 01/01: JEXL-390: modified grammar to remove pragma declarations from statements and allow them in scripts/blocks;

Posted by he...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fe97d7c4e58a538544f43a1259d22647df093055
Author: henrib <he...@apache.org>
AuthorDate: Mon Dec 19 16:28:11 2022 +0100

    JEXL-390: modified grammar to remove pragma declarations from statements and allow them in scripts/blocks;
---
 .../org/apache/commons/jexl3/parser/Parser.jjt     |  7 +++----
 .../org/apache/commons/jexl3/Issues300Test.java    | 22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+), 4 deletions(-)

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 05a17285..cd6cc868 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
+++ b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
@@ -324,7 +324,7 @@ ASTJexlScript JexlScript(Scope frame) : {
    {
         pushUnit(jjtThis);
    }
-        (Statement())* <EOF>
+        ( LOOKAHEAD(<PRAGMA>) Pragma() | Statement() )* <EOF>
    {
         popUnit(jjtThis);
         return jjtThis.script();
@@ -338,7 +338,7 @@ ASTJexlScript JexlExpression(Scope frame) #JexlScript : {
    {
         pushUnit(jjtThis);
    }
-   ( Expression() )? <EOF>
+   ( Pragma() )* ( Expression() )? <EOF>
    {
         popUnit(jjtThis);
         return jjtThis.script();
@@ -370,7 +370,6 @@ void Statement() #void : {}
 void StatementNoVar() #void : {}
 {
     <SEMICOL>
-    | LOOKAHEAD(<PRAGMA>) Pragma()
     | LOOKAHEAD(<ANNOTATION>) AnnotatedStatement()
     | LOOKAHEAD(<IF>) IfStatement()
     | LOOKAHEAD(<FOR>) ForeachStatement()
@@ -386,7 +385,7 @@ void StatementNoVar() #void : {}
 
 void Block() #Block : {}
 {
-    <LCURLY> { pushUnit(jjtThis); } ( Statement() )* { popUnit(jjtThis); } <RCURLY>
+    <LCURLY> { pushUnit(jjtThis); } ( LOOKAHEAD(<PRAGMA>)  Pragma() | Statement() )* { popUnit(jjtThis); } <RCURLY>
 }
 
 void FunctionStatement() #JexlLambda : {}
diff --git a/src/test/java/org/apache/commons/jexl3/Issues300Test.java b/src/test/java/org/apache/commons/jexl3/Issues300Test.java
index 720bafaf..e742d4e4 100644
--- a/src/test/java/org/apache/commons/jexl3/Issues300Test.java
+++ b/src/test/java/org/apache/commons/jexl3/Issues300Test.java
@@ -34,6 +34,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static org.apache.commons.jexl3.internal.Util.debuggerCheck;
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -1150,4 +1151,25 @@ public class Issues300Test {
             Assert.assertEquals("ABC", s1.execute(ctxt, null));
         }
     }
+    @Test
+    public void test390() throws Exception {
+        final JexlEngine jexl = new JexlBuilder()
+                .safe(false)
+                .strict(true)
+                .debug(true)
+                .create();
+        JexlScript script = null;
+        String src;
+        src = "if (true) #pragma one 42";
+        try {
+            script = jexl.createScript(src);
+            Assert.fail("should have failed parsing");
+        } catch(JexlException.Parsing xparse) {
+            Assert.assertTrue(xparse.getDetail().contains("pragma"));
+        }
+        src = "if (true) { #pragma one 42 }";
+        script = jexl.createScript(src);
+        Object result = script.execute(null);
+        debuggerCheck(jexl);
+    }
 }