diff --git a/core/src/main/java/org/apache/struts2/util/ContainUtil.java b/core/src/main/java/org/apache/struts2/util/ContainUtil.java index af19603ae..1cc0bce02 100644 --- a/core/src/main/java/org/apache/struts2/util/ContainUtil.java +++ b/core/src/main/java/org/apache/struts2/util/ContainUtil.java @@ -77,7 +77,7 @@ public class ContainUtil { } } if (obj1 instanceof Iterable) { for (Object value : ((Iterable) obj1)) { - if (obj2.equals(value) || obj2.toString().equals(value.toString())) { + if (obj2.equals(value) || (value != null && obj2.toString().equals(value.toString()))) { return true; } } @@ -85,7 +85,7 @@ public class ContainUtil { for (int i = 0; i < Array.getLength(obj1); i++) { Object value = Array.get(obj1, i); - if (obj2.equals(value) || obj2.toString().equals(value.toString())) { + if (obj2.equals(value) || (value != null && obj2.toString().equals(value.toString()))) { return true; } } diff --git a/core/src/test/java/org/apache/struts2/util/ContainUtilTest.java b/core/src/test/java/org/apache/struts2/util/ContainUtilTest.java index 7e5d16208..1bee59917 100644 --- a/core/src/test/java/org/apache/struts2/util/ContainUtilTest.java +++ b/core/src/test/java/org/apache/struts2/util/ContainUtilTest.java @@ -46,6 +46,11 @@ public class ContainUtilTest extends TestCase { assertTrue(ContainUtil.contains(new String[] {"a", null, "b"}, "b")); } + public void testArayContainsNull()throws Exception { + // null gives always false + assertFalse(ContainUtil.contains(new String[] {"a", null, "b"}, null)); + } + public void testSimpleList() throws Exception { List l = new ArrayList(); l.add("one"); @@ -96,13 +101,28 @@ public class ContainUtilTest extends TestCase { } public void testIterableObject() throws Exception { - MyIterableObject i = new MyIterableObject("one", "two"); + MyIterableObject i = new MyIterableObject("one", "two"); assertFalse(ContainUtil.contains(i, "thre")); assertTrue(ContainUtil.contains(i, "one")); assertTrue(ContainUtil.contains(i, "two")); } - + + public void testNullInIterableObject() throws Exception { + MyIterableObject i = new MyIterableObject("one", null, "two"); + + assertFalse(ContainUtil.contains(i, "thre")); + assertTrue(ContainUtil.contains(i, "one")); + assertTrue(ContainUtil.contains(i, "two")); + } + + public void testIterableObjectContainsNull() throws Exception { + MyIterableObject i = new MyIterableObject("one", null, "two"); + + // null gives always false + assertFalse(ContainUtil.contains(i, null)); + } + public static class MyIterableObject implements Iterable { private List values; @@ -126,7 +146,11 @@ public class ContainUtilTest extends TestCase { @Override public int hashCode() { - return this.name.hashCode(); + final int prime = 31; + int result = 1; + result = prime * result + ((age == null) ? 0 : age.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; } @Override