diff --git a/core/src/main/java/org/acegisecurity/userdetails/User.java b/core/src/main/java/org/acegisecurity/userdetails/User.java index e4a2bd8b6b..45c3e532eb 100644 --- a/core/src/main/java/org/acegisecurity/userdetails/User.java +++ b/core/src/main/java/org/acegisecurity/userdetails/User.java @@ -48,6 +48,8 @@ public class User { * is enabled * * @throws IllegalArgumentException if a null value was passed + * either as a parameter or as an element in the + * GrantedAuthority[] array */ public User(String username, String password, boolean enabled, GrantedAuthority[] authorities) throws IllegalArgumentException { @@ -56,6 +58,14 @@ public class User { "Cannot pass null values to constructor"); } + for (int i = 0; i < authorities.length; i++) { + if (authorities[i] == null) { + throw new IllegalArgumentException("Granted authority element " + + i + + " is null - GrantedAuthority[] cannot contain any null elements"); + } + } + this.username = username; this.password = password; this.enabled = enabled; diff --git a/core/src/test/java/org/acegisecurity/providers/dao/UserTests.java b/core/src/test/java/org/acegisecurity/providers/dao/UserTests.java index c4a672e177..8490947518 100644 --- a/core/src/test/java/org/acegisecurity/providers/dao/UserTests.java +++ b/core/src/test/java/org/acegisecurity/providers/dao/UserTests.java @@ -84,6 +84,19 @@ public class UserTests extends TestCase { } } + public void testNullWithinGrantedAuthorityElementIsRejected() + throws Exception { + try { + User user = new User(null, "koala", true, + new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl( + "ROLE_TWO"), null, new GrantedAuthorityImpl( + "ROLE_THREE")}); + fail("Should have thrown IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + assertTrue(true); + } + } + public void testUserGettersSetter() throws Exception { User user = new User("marissa", "koala", true, new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(