Mercurial > hg > shenandoah-preopenjdk-archive > openjdk8 > jdk
changeset 253:aabdc646cb31
6631361: Spec of AccessControlContext constructor is not complete
Summary: Add NullPointerException to @throws clause and treat empty array and array of nulls as equivalent
Reviewed-by: valeriep
author | mullan |
---|---|
date | Mon, 14 Apr 2008 10:25:05 -0400 |
parents | 05afbed1dc4f |
children | b627c3efd97c |
files | src/share/classes/java/security/AccessControlContext.java test/java/security/AccessControlContext/CheckCtor.java |
diffstat | 2 files changed, 76 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/security/AccessControlContext.java Fri Mar 21 14:45:20 2008 -0700 +++ b/src/share/classes/java/security/AccessControlContext.java Mon Apr 14 10:25:05 2008 -0400 @@ -101,13 +101,14 @@ } /** - * 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 @@ 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); + } } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/security/AccessControlContext/CheckCtor.java Mon Apr 14 10:25:05 2008 -0400 @@ -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"); + } + } +}