Author: jcompagner
Date: Fri Jul  3 12:01:23 2009
New Revision: 790879

URL: http://svn.apache.org/viewvc?rev=790879&view=rev
Log:
IndexOutOfBoundsException when PropertyResolver is using an invalid list index
PropertyModel does not support index only property ("[0]")
Issue: WICKET-2337,2354

Modified:
    
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
    
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java

Modified: 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java?rev=790879&r1=790878&r2=790879&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
 (original)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
 Fri Jul  3 12:01:23 2009
@@ -218,6 +218,12 @@
                while (index != -1)
                {
                        exp = expressionBracketsSeperated.substring(lastIndex, 
index);
+                       if (exp.length() == 0)
+                       {
+                               exp = 
expressionBracketsSeperated.substring(index + 1);
+                               break;
+                       }
+
                        IGetAndSet getAndSetter = null;
                        try
                        {
@@ -759,6 +765,8 @@
                 */
                public Object getValue(Object object)
                {
+                       if (((List)object).size() <= index)
+                               return null;
                        return ((List)object).get(index);
                }
 
@@ -815,7 +823,11 @@
                 */
                public Object getValue(Object object)
                {
-                       return Array.get(object, index);
+                       if (Array.getLength(object) > index)
+                       {
+                               return Array.get(object, index);
+                       }
+                       return null;
                }
 
                /**

Modified: 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java?rev=790879&r1=790878&r2=790879&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
 (original)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
 Fri Jul  3 12:01:23 2009
@@ -288,6 +288,42 @@
        /**
         * @throws Exception
         */
+       public void testGetPropertyByNotExistingIndexArrayLookup() throws 
Exception
+       {
+               PropertyResolver.setValue("addressArray", person, new Address[] 
{ }, CONVERTER);
+               String street = 
(String)PropertyResolver.getValue("addressArray.0.street", person);
+               assertNull(street);
+               street = 
(String)PropertyResolver.getValue("addressArray[0].street", person);
+               assertNull(street);
+       }
+
+       /**
+        * @throws Exception
+        */
+       public void testGetPropertyByNotExistingIndexListLookup() throws 
Exception
+       {
+               PropertyResolver.setValue("addressList", person, new 
ArrayList(), CONVERTER);
+               String street = 
(String)PropertyResolver.getValue("addressList.0.street", person);
+               assertNull(street);
+               street = 
(String)PropertyResolver.getValue("addressList[0].street", person);
+               assertNull(street);
+       }
+
+       /**
+        * @throws Exception
+        */
+       public void testGetIndexPropertyDirectly() throws Exception
+       {
+               Address address = new Address();
+               Address[] addresses = new Address[] { address };
+
+               Address address2 = (Address)PropertyResolver.getValue("[0]", 
addresses);
+               assertSame(address, address2);
+       }
+
+       /**
+        * @throws Exception
+        */
        public void testListSizeLookup() throws Exception
        {
                List/* <Address> */addresses = new ArrayList/* <Address> */();
@@ -300,6 +336,7 @@
                assertEquals(size, new Integer(2));
        }
 
+
        /**
         * @throws Exception
         */


Reply via email to