You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2009/07/03 14:01:23 UTC
svn commit: r790879 - in /wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src:
main/java/org/apache/wicket/util/lang/PropertyResolver.java
test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
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
*/