6631361: Spec of AccessControlContext constructor is not complete

Add NullPointerException to @throws clause and treat empty array and array of nulls as equivalent

Reviewed-by: valeriep
This commit is contained in:
Sean Mullan 2008-04-14 10:25:05 -04:00
parent 43aa87d64a
commit 5a0ae8fa6f
2 changed files with 76 additions and 3 deletions
jdk
src/share/classes/java/security
test/java/security/AccessControlContext

@ -101,13 +101,14 @@ public final class AccessControlContext {
}
/**
* Create an AccessControlContext with the given set of ProtectionDomains.
* Create an AccessControlContext with the given array of ProtectionDomains.
* Context must not be null. Duplicate domains will be removed from the
* context.
*
* @param context the ProtectionDomains associated with this context.
* The non-duplicate domains are copied from the array. Subsequent
* changes to the array will not affect this AccessControlContext.
* @throws NullPointerException if <code>context</code> is <code>null</code>
*/
public AccessControlContext(ProtectionDomain context[])
{
@ -125,8 +126,10 @@ public final class AccessControlContext {
if ((context[i] != null) && (!v.contains(context[i])))
v.add(context[i]);
}
this.context = new ProtectionDomain[v.size()];
this.context = v.toArray(this.context);
if (!v.isEmpty()) {
this.context = new ProtectionDomain[v.size()];
this.context = v.toArray(this.context);
}
}
}

@ -0,0 +1,70 @@
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6631361
* @summary Test constructor when PD array is null or contains all null contexts
*/
import java.security.AccessControlContext;
import java.security.ProtectionDomain;
public class CheckCtor {
public static void main(String[] args) throws Exception {
// check that null PD array throws NPE
try {
new AccessControlContext(null);
throw new Exception("Expected NullPointerException not thrown");
} catch (Exception e) {
if (!(e instanceof NullPointerException)) {
throw new Exception("Expected NullPointerException not thrown");
}
}
// check that empty PD array equals PD array of one or more nulls
ProtectionDomain zero[] = {};
ProtectionDomain null1[] = {null};
ProtectionDomain null2[] = {null, null};
AccessControlContext accZero = new AccessControlContext(zero);
AccessControlContext accNull1 = new AccessControlContext(null1);
AccessControlContext accNull2 = new AccessControlContext(null2);
testEquals(accZero, accNull1);
testEquals(accZero, accNull2);
testEquals(accNull1, accNull2);
testEquals(accNull1, accZero);
testEquals(accNull2, accZero);
testEquals(accNull2, accNull1);
}
private static void testEquals(AccessControlContext acc1,
AccessControlContext acc2) throws Exception {
if (!acc1.equals(acc2)) {
throw new Exception("AccessControlContexts should be equal");
}
}
}