You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/05/14 23:20:41 UTC

svn commit: r1594723 - in /tomcat/trunk: java/org/apache/el/parser/AstValue.java test/org/apache/el/TestValueExpressionImpl.java webapps/docs/changelog.xml

Author: markt
Date: Wed May 14 21:20:40 2014
New Revision: 1594723

URL: http://svn.apache.org/r1594723
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56522
When setting a value for a ValueExpression, ensure that the expected coercions take place such as a null string being coerced to an empty string.

Modified:
    tomcat/trunk/java/org/apache/el/parser/AstValue.java
    tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/el/parser/AstValue.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstValue.java?rev=1594723&r1=1594722&r2=1594723&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/AstValue.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/AstValue.java Wed May 14 21:20:40 2014
@@ -197,30 +197,14 @@ public final class AstValue extends Simp
 
         // coerce to the expected type
         Class<?> targetClass = resolver.getType(ctx, t.base, t.property);
-        if (!isAssignable(value, targetClass)) {
-            resolver.setValue(ctx, t.base, t.property,
-                    ELSupport.coerceToType(value, targetClass));
-        } else {
-            resolver.setValue(ctx, t.base, t.property, value);
-        }
+        resolver.setValue(ctx, t.base, t.property,
+                ELSupport.coerceToType(value, targetClass));
         if (!ctx.isPropertyResolved()) {
             throw new PropertyNotFoundException(MessageFactory.get(
                     "error.resolver.unhandled", t.base, t.property));
         }
     }
 
-    private boolean isAssignable(Object value, Class<?> targetClass) {
-        if (targetClass == null) {
-            return false;
-        } else if (value != null && targetClass.isPrimitive()) {
-            return false;
-        } else if (value != null && !targetClass.isInstance(value)) {
-            return false;
-        }
-        return true;
-    }
-
-
     @Override
     // Interface el.parser.Node uses raw types (and is auto-generated)
     public MethodInfo getMethodInfo(EvaluationContext ctx,

Modified: tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java?rev=1594723&r1=1594722&r2=1594723&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java (original)
+++ tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java Wed May 14 21:20:40 2014
@@ -241,4 +241,29 @@ public class TestValueExpressionImpl {
         Integer result = (Integer) ve.getValue(context);
         assertEquals(Integer.valueOf(0), result);
     }
+
+
+    @Test
+    public void testBug56522SetNullValue() {
+        ExpressionFactory factory = ExpressionFactory.newInstance();
+        ELContext context = new ELContextImpl(factory);
+
+        TesterBeanB beanB = new TesterBeanB();
+        beanB.setName("Tomcat");
+        ValueExpression var =
+            factory.createValueExpression(beanB, TesterBeanB.class);
+        context.getVariableMapper().setVariable("beanB", var);
+
+        ValueExpression ve = factory.createValueExpression(
+                context, "${beanB.name}", String.class);
+
+        // First check the basics work
+        String result = (String) ve.getValue(context);
+        assertEquals("Tomcat", result);
+
+        // Now set the value to null
+        ve.setValue(context, null);
+
+        assertEquals("", beanB.getName());
+    }
 }

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1594723&r1=1594722&r2=1594723&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed May 14 21:20:40 2014
@@ -44,6 +44,18 @@
   They eventually become mixed with the numbered issues. (I.e., numbered
   issues to not "pop up" wrt. others).
 -->
+<section name="Tomcat 8.0.7 (markt)">
+  <subsection name="Jasper">
+    <changelog>
+      <fix>
+        <bug>56522</bug>: When setting a value for a
+        <code>ValueExpression</code>, ensure that the expected coercions take
+        place such as a <code>null</code> string being coerced to an empty
+        string. (markt)
+      </fix>
+    </changelog>
+  </subsection>
+</section>
 <section name="Tomcat 8.0.6 (markt)">
   <subsection name="Catalina">
     <changelog>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org