Author: jcompagner
Date: Mon Jul  6 15:23:09 2009
New Revision: 791513

URL: http://svn.apache.org/viewvc?rev=791513&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/trunk/wicket/   (props changed)
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java

Propchange: wicket/trunk/wicket/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jul  6 15:23:09 2009
@@ -1,3 +1,3 @@
-/wicket/branches/wicket-1.3.x/jdk-1.4/wicket:653208,653212,653215,653226,653231,654304,655446,655466,655786,658141,658189,659118,659120,662360,663058,671549,671885,687144-688996,698530-698577,701132-701133,701843,701850-701877,704231,708127,722099-722105,726536,728467-728490,731960,734478,739647,739951,745468-745497,749817,755171-755176,759905,760374,764756,769389,769440,774373,781715,781719
+/wicket/branches/wicket-1.3.x/jdk-1.4/wicket:653208,653212,653215,653226,653231,654304,655446,655466,655786,658141,658189,659118,659120,662360,663058,671549,671885,687144-688996,698530-698577,701132-701133,701843,701850-701877,704231,708127,722099-722105,726536,728467-728490,731960,734478,739647,739951,745468-745497,749817,755171-755176,759905,760374,764756,769389,769440,774373,781715,781719,790879
 
/wicket/sandbox/jthomerson/experimental/wicket-devutils/wicket:760296-760351,760353-760355
 /wicket/trunk/wicket-devutils/wicket:760352

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java?rev=791513&r1=791512&r2=791513&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
 Mon Jul  6 15:23:09 2009
@@ -217,6 +217,12 @@
                while (index != -1)
                {
                        exp = expressionBracketsSeperated.substring(lastIndex, 
index);
+                       if (exp.length() == 0)
+                       {
+                               exp = 
expressionBracketsSeperated.substring(index + 1);
+                               break;
+                       }
+
                        IGetAndSet getAndSetter = null;
                        try
                        {
@@ -762,6 +768,8 @@
                 */
                public Object getValue(Object object)
                {
+                       if (((List<?>)object).size() <= index)
+                               return null;
                        return ((List<?>)object).get(index);
                }
 
@@ -819,7 +827,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/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java?rev=791513&r1=791512&r2=791513&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
 Mon Jul  6 15:23:09 2009
@@ -294,6 +294,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> */();
@@ -306,6 +342,7 @@
                assertEquals(size, new Integer(2));
        }
 
+
        /**
         * @throws Exception
         */


Reply via email to