Author: henrib
Date: Wed Jul  6 09:40:39 2016
New Revision: 1751647

URL: http://svn.apache.org/viewvc?rev=1751647&view=rev
Log:
JEXL: 
Fixing JEXL-202 by extending parsing check on l-value for all assignment 
operators

Modified:
    commons/proper/jexl/trunk/RELEASE-NOTES.txt
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
    commons/proper/jexl/trunk/src/site/xdoc/changes.xml
    
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/parser/ParserTest.java

Modified: commons/proper/jexl/trunk/RELEASE-NOTES.txt
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/RELEASE-NOTES.txt?rev=1751647&r1=1751646&r2=1751647&view=diff
==============================================================================
--- commons/proper/jexl/trunk/RELEASE-NOTES.txt (original)
+++ commons/proper/jexl/trunk/RELEASE-NOTES.txt Wed Jul  6 09:40:39 2016
@@ -27,7 +27,7 @@ Version 3.0.1 is a micro release to fix
 
 Bugs Fixed in 3.0.1:
 ====================
-
+* JEXL-202:     Detect invalid assignment operator usage with non-assignable 
l-value during script parsing
 * JEXL-198:     JxltEngine Template does not expose pragmas
 * JEXL-196:     Script execution hangs while calling method with one argument 
without parameter
 * JEXL-194      allow synchronization on iterableValue in foreach statement

Modified: 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java?rev=1751647&r1=1751646&r2=1751647&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
 (original)
+++ 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
 Wed Jul  6 09:40:39 2016
@@ -25,6 +25,9 @@ import org.apache.commons.jexl3.internal
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.TreeMap;
 import java.util.Stack;
 
@@ -171,6 +174,22 @@ public abstract class JexlParser extends
     }
 
     /**
+     * The set of assignment operators as classes.
+     */
+    @SuppressWarnings("unchecked")
+    private static final Set<Class<? extends JexlNode>> ASSIGN_NODES = new 
HashSet<Class<? extends JexlNode>>(
+        Arrays.asList(
+            ASTAssignment.class,
+            ASTSetAddNode.class,
+            ASTSetMultNode.class,
+            ASTSetDivNode.class,
+            ASTSetAndNode.class,
+            ASTSetOrNode.class,
+            ASTSetXorNode.class,
+            ASTSetSubNode.class
+        )
+    );
+    /**
      * Called by parser at end of node construction.
      * <p>Detects "Ambiguous statement" and 'non-leaft value assignment'.</p>
      * @param node the node
@@ -186,7 +205,7 @@ public abstract class JexlParser extends
             popFrame();
         } else if (node instanceof ASTAmbiguous) {
             throwParsingException(JexlException.Ambiguous.class, node);
-        } else if (node instanceof ASTAssignment) {
+        } else if (ASSIGN_NODES.contains(node.getClass())) {
             JexlNode lv = node.jjtGetChild(0);
             if (!lv.isLeftValue()) {
                 throwParsingException(JexlException.Assignment.class, lv);

Modified: commons/proper/jexl/trunk/src/site/xdoc/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/site/xdoc/changes.xml?rev=1751647&r1=1751646&r2=1751647&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/site/xdoc/changes.xml (original)
+++ commons/proper/jexl/trunk/src/site/xdoc/changes.xml Wed Jul  6 09:40:39 2016
@@ -26,6 +26,9 @@
     </properties>
     <body>
         <release version="3.0.1" date="unreleased">
+            <action dev="henrib" type="fix" issue="JEXL-202" due-to="Dmitri 
Blinov">
+                Detect invalid assignment operator usage with non-assignable 
l-value during script parsing
+            </action>
             <action dev="henrib" type="fix" issue="JEXL-198" due-to="Terefang 
Verigorn">
                 JxltEngine Template does not expose pragmas
             </action>

Modified: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/parser/ParserTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/parser/ParserTest.java?rev=1751647&r1=1751646&r2=1751647&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/parser/ParserTest.java
 (original)
+++ 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/parser/ParserTest.java
 Wed Jul  6 09:40:39 2016
@@ -48,12 +48,17 @@ public class ParserTest extends TestCase
     }
 
     public void testErrorAssign() throws Exception {
-        Parser parser = new Parser(new StringReader(";"));
-        try {
-            JexlNode sn = parser.parse(null, "foo() = 1;", null, false, false);
-            fail("should have failed on invalid assignment");
-        } catch (JexlException.Parsing xparse) {
-            // ok
+        String[] ops = { "=", "+=", "-=", "/=", "*=", "^=", "&=", "|=" };
+        for(String op : ops) {
+            Parser parser = new Parser(new StringReader(";"));
+            try {
+                JexlNode sn = parser.parse(null, "foo() "+op+" 1;", null, 
false, false);
+                fail("should have failed on invalid assignment " + op);
+            } catch (JexlException.Parsing xparse) {
+                // ok
+                String ss = xparse.getDetail();
+                String sss = xparse.toString();
+            }
         }
     }
 


Reply via email to