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 2013/10/28 21:59:41 UTC

svn commit: r1536520 - in /tomcat/trunk: java/javax/el/ArrayELResolver.java java/javax/el/Util.java test/javax/el/TestArrayELResolver.java

Author: markt
Date: Mon Oct 28 20:59:41 2013
New Revision: 1536520

URL: http://svn.apache.org/r1536520
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55691
ArrayELResolver needs to handle the case where the base object is an array of primitives.

Modified:
    tomcat/trunk/java/javax/el/ArrayELResolver.java
    tomcat/trunk/java/javax/el/Util.java
    tomcat/trunk/test/javax/el/TestArrayELResolver.java

Modified: tomcat/trunk/java/javax/el/ArrayELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ArrayELResolver.java?rev=1536520&r1=1536519&r2=1536520&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/ArrayELResolver.java (original)
+++ tomcat/trunk/java/javax/el/ArrayELResolver.java Mon Oct 28 20:59:41 2013
@@ -88,9 +88,8 @@ public class ArrayELResolver extends ELR
 
             int idx = coerce(property);
             checkBounds(base, idx);
-            if (value != null &&
-                    !base.getClass().getComponentType().isAssignableFrom(
-                            value.getClass())) {
+            if (value != null && !Util.isAssignableFrom(value.getClass(),
+                    base.getClass().getComponentType())) {
                 throw new ClassCastException(Util.message(context,
                         "objectNotAssignable", value.getClass().getName(),
                         base.getClass().getComponentType().getName()));

Modified: tomcat/trunk/java/javax/el/Util.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/Util.java?rev=1536520&r1=1536519&r2=1536520&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/Util.java (original)
+++ tomcat/trunk/java/javax/el/Util.java Mon Oct 28 20:59:41 2013
@@ -438,7 +438,7 @@ class Util {
      * This method duplicates code in org.apache.el.util.ReflectionUtil. When
      * making changes keep the code in sync.
      */
-    private static boolean isAssignableFrom(Class<?> src, Class<?> target) {
+    static boolean isAssignableFrom(Class<?> src, Class<?> target) {
         // src will always be an object
         // Short-cut. null is always assignable to an object and in EL null
         // can always be coerced to a valid value for a primitive

Modified: tomcat/trunk/test/javax/el/TestArrayELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TestArrayELResolver.java?rev=1536520&r1=1536519&r2=1536520&view=diff
==============================================================================
--- tomcat/trunk/test/javax/el/TestArrayELResolver.java (original)
+++ tomcat/trunk/test/javax/el/TestArrayELResolver.java Mon Oct 28 20:59:41 2013
@@ -246,6 +246,22 @@ public class TestArrayELResolver {
     }
 
     /**
+     * Tests setting arrays of primitives.
+     * https://issues.apache.org/bugzilla/show_bug.cgi?id=55691
+     */
+    @Test
+    public void testSetValue08() {
+        ArrayELResolver resolver = new ArrayELResolver();
+        ELContext context = new StandardELContext(
+                ELManager.getExpressionFactory());
+
+        int[] base = new int[] { 1, 2, 3 };
+        resolver.setValue(context, base, new Integer(1), Integer.valueOf(4));
+
+        Assert.assertEquals(Integer.valueOf(base[1]), Integer.valueOf(4));
+    }
+
+    /**
      * Tests that a null context results in an NPE as per EL Javadoc.
      */
     @Test(expected = NullPointerException.class)



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