[ https://issues.apache.org/jira/browse/WW-4848?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16158750#comment-16158750 ]
Yasser Zamani commented on WW-4848: ----------------------------------- Wow! fortunately OGNL project is such great which I can resolve this simply as something like below: {code:java} boolean isBooleanExpression(Object tree){ if(tree instanceof ognl.ComparisonExpression) return true; // checks if root is ==, <, >, <=, >= if(not (tree instanceof ognl.BooleanExpression)) return false; // checks if root is not ||, &&, ! boolean ret = true; for(int i=0;i<tree.childs.length;i++) ret &= isBooleanExpression(tree.childs[i]); return ret; } {code} then {code:title=Ognl.java:459|borderStyle=solid} public static Object getValue(Object tree, Map context, Object root, Class resultType) throws OgnlException { if(resultType.equals(Boolean.class) && ! isBooleanExpression(tree)) throw new OgnlException("assign a new value to an object is not allowed in boolean expressions.You may accidentally incorrectly have '=' in your expression"); {code} *For now I just worry about backward compatibility*. Firstly I prefer to try a pull request on OGNL's project. If not accepted, then I try Struts2. Any idea or objections? > The if test can accidently incorrectly assign a new value to an object > ---------------------------------------------------------------------- > > Key: WW-4848 > URL: https://issues.apache.org/jira/browse/WW-4848 > Project: Struts 2 > Issue Type: Bug > Reporter: Alan Comeau > Priority: Minor > Fix For: 2.5.14 > > > The {{s:if}} tag has the side effect of assigning to an existing object > if the comparison is badly formed using {{=}} instead of {{==}} > {code:html} > <s:if test="user.id = 0"> > //at this point the user.id is now 0 not its original value > </s:if> > {code} > even though this is clearly badly formed, the test should not assign anything > to the object -- This message was sent by Atlassian JIRA (v6.4.14#64029)