# HG changeset patch # User igerasim # Date 1452011406 -10800 # Node ID 552953ba78bf92aa3d89a0e4d20b110bb6cb4421 # Parent 4c53be81bc7abbee75a8700eb71a55c084a7bab3 8138811: Construction of static protection domains Reviewed-by: valeriep diff -r 4c53be81bc7a -r 552953ba78bf src/share/classes/java/security/ProtectionDomain.java --- a/src/share/classes/java/security/ProtectionDomain.java Mon Dec 21 10:43:40 2015 -0800 +++ b/src/share/classes/java/security/ProtectionDomain.java Tue Jan 05 19:30:06 2016 +0300 @@ -475,6 +475,11 @@ } }; } + + @Override + public boolean getStaticPermissionsField(ProtectionDomain pd) { + return pd.staticPermissions; + } }); } } diff -r 4c53be81bc7a -r 552953ba78bf src/share/classes/javax/security/auth/SubjectDomainCombiner.java --- a/src/share/classes/javax/security/auth/SubjectDomainCombiner.java Mon Dec 21 10:43:40 2015 -0800 +++ b/src/share/classes/javax/security/auth/SubjectDomainCombiner.java Tue Jan 05 19:30:06 2016 +0300 @@ -37,6 +37,8 @@ import java.util.Set; import java.util.WeakHashMap; import java.lang.ref.WeakReference; +import sun.misc.SharedSecrets; +import sun.misc.JavaSecurityProtectionDomainAccess; /** * A {@code SubjectDomainCombiner} updates ProtectionDomains @@ -65,6 +67,9 @@ private static final boolean allowCaching = (useJavaxPolicy && cachePolicy()); + private static final JavaSecurityProtectionDomainAccess pdAccess = + SharedSecrets.getJavaSecurityProtectionDomainAccess(); + /** * Associate the provided {@code Subject} with this * {@code SubjectDomainCombiner}. @@ -239,10 +244,15 @@ subjectPd = cachedPDs.getValue(pd); if (subjectPd == null) { - subjectPd = new ProtectionDomain(pd.getCodeSource(), + if (pdAccess.getStaticPermissionsField(pd)) { + // Need to keep static ProtectionDomain objects static + subjectPd = pd; + } else { + subjectPd = new ProtectionDomain(pd.getCodeSource(), pd.getPermissions(), pd.getClassLoader(), principals); + } cachedPDs.putValue(pd, subjectPd); } else { allNew = false; diff -r 4c53be81bc7a -r 552953ba78bf src/share/classes/sun/misc/JavaSecurityProtectionDomainAccess.java --- a/src/share/classes/sun/misc/JavaSecurityProtectionDomainAccess.java Mon Dec 21 10:43:40 2015 -0800 +++ b/src/share/classes/sun/misc/JavaSecurityProtectionDomainAccess.java Tue Jan 05 19:30:06 2016 +0300 @@ -36,4 +36,9 @@ * Returns the ProtectionDomainCache. */ ProtectionDomainCache getProtectionDomainCache(); + + /** + * Returns the staticPermissions field of the specified object + */ + boolean getStaticPermissionsField(ProtectionDomain pd); }