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
 	 */