43 import java.lang.invoke.SwitchPoint;
44 import java.lang.ref.ReferenceQueue;
45 import java.lang.ref.SoftReference;
46 import java.lang.reflect.Field;
47 import java.lang.reflect.Modifier;
48 import java.net.MalformedURLException;
49 import java.net.URL;
50 import java.security.AccessControlContext;
51 import java.security.AccessController;
52 import java.security.CodeSigner;
53 import java.security.CodeSource;
54 import java.security.Permissions;
55 import java.security.PrivilegedAction;
56 import java.security.PrivilegedActionException;
57 import java.security.PrivilegedExceptionAction;
58 import java.security.ProtectionDomain;
59 import java.util.Collection;
60 import java.util.HashMap;
61 import java.util.LinkedHashMap;
62 import java.util.Map;
63 import java.util.concurrent.atomic.AtomicLong;
64 import java.util.concurrent.atomic.AtomicReference;
65 import java.util.function.Consumer;
66 import java.util.function.Supplier;
67 import java.util.logging.Level;
68 import javax.script.ScriptEngine;
69 import jdk.internal.org.objectweb.asm.ClassReader;
70 import jdk.internal.org.objectweb.asm.util.CheckClassAdapter;
71 import jdk.nashorn.api.scripting.ClassFilter;
72 import jdk.nashorn.api.scripting.ScriptObjectMirror;
73 import jdk.nashorn.internal.codegen.Compiler;
74 import jdk.nashorn.internal.codegen.Compiler.CompilationPhases;
75 import jdk.nashorn.internal.codegen.ObjectClassGenerator;
76 import jdk.nashorn.internal.ir.FunctionNode;
77 import jdk.nashorn.internal.ir.debug.ASTWriter;
78 import jdk.nashorn.internal.ir.debug.PrintVisitor;
79 import jdk.nashorn.internal.lookup.MethodHandleFactory;
80 import jdk.nashorn.internal.objects.Global;
81 import jdk.nashorn.internal.parser.Parser;
82 import jdk.nashorn.internal.runtime.events.RuntimeEvent;
887 * Checks that the given package name can be accessed from no permissions context.
888 *
889 * @param pkgName package name
890 * @throws SecurityException if not accessible
891 */
892 public static void checkPackageAccess(final String pkgName) {
893 final SecurityManager sm = System.getSecurityManager();
894 if (sm != null) {
895 checkPackageAccess(sm, pkgName.endsWith(".") ? pkgName : pkgName + ".");
896 }
897 }
898
899 /**
900 * Checks that the given package can be accessed from no permissions context.
901 *
902 * @param sm current security manager instance
903 * @param fullName fully qualified package name
904 * @throw SecurityException if not accessible
905 */
906 private static void checkPackageAccess(final SecurityManager sm, final String fullName) {
907 sm.getClass(); // null check
908 final int index = fullName.lastIndexOf('.');
909 if (index != -1) {
910 final String pkgName = fullName.substring(0, index);
911 AccessController.doPrivileged(new PrivilegedAction<Void>() {
912 @Override
913 public Void run() {
914 sm.checkPackageAccess(pkgName);
915 return null;
916 }
917 }, NO_PERMISSIONS_ACC_CTXT);
918 }
919 }
920
921 /**
922 * Checks that the given Class can be accessed from no permissions context.
923 *
924 * @param clazz Class object
925 * @return true if package is accessible, false otherwise
926 */
927 private static boolean isAccessiblePackage(final Class<?> clazz) {
|
43 import java.lang.invoke.SwitchPoint;
44 import java.lang.ref.ReferenceQueue;
45 import java.lang.ref.SoftReference;
46 import java.lang.reflect.Field;
47 import java.lang.reflect.Modifier;
48 import java.net.MalformedURLException;
49 import java.net.URL;
50 import java.security.AccessControlContext;
51 import java.security.AccessController;
52 import java.security.CodeSigner;
53 import java.security.CodeSource;
54 import java.security.Permissions;
55 import java.security.PrivilegedAction;
56 import java.security.PrivilegedActionException;
57 import java.security.PrivilegedExceptionAction;
58 import java.security.ProtectionDomain;
59 import java.util.Collection;
60 import java.util.HashMap;
61 import java.util.LinkedHashMap;
62 import java.util.Map;
63 import java.util.Objects;
64 import java.util.concurrent.atomic.AtomicLong;
65 import java.util.concurrent.atomic.AtomicReference;
66 import java.util.function.Consumer;
67 import java.util.function.Supplier;
68 import java.util.logging.Level;
69 import javax.script.ScriptEngine;
70 import jdk.internal.org.objectweb.asm.ClassReader;
71 import jdk.internal.org.objectweb.asm.util.CheckClassAdapter;
72 import jdk.nashorn.api.scripting.ClassFilter;
73 import jdk.nashorn.api.scripting.ScriptObjectMirror;
74 import jdk.nashorn.internal.codegen.Compiler;
75 import jdk.nashorn.internal.codegen.Compiler.CompilationPhases;
76 import jdk.nashorn.internal.codegen.ObjectClassGenerator;
77 import jdk.nashorn.internal.ir.FunctionNode;
78 import jdk.nashorn.internal.ir.debug.ASTWriter;
79 import jdk.nashorn.internal.ir.debug.PrintVisitor;
80 import jdk.nashorn.internal.lookup.MethodHandleFactory;
81 import jdk.nashorn.internal.objects.Global;
82 import jdk.nashorn.internal.parser.Parser;
83 import jdk.nashorn.internal.runtime.events.RuntimeEvent;
888 * Checks that the given package name can be accessed from no permissions context.
889 *
890 * @param pkgName package name
891 * @throws SecurityException if not accessible
892 */
893 public static void checkPackageAccess(final String pkgName) {
894 final SecurityManager sm = System.getSecurityManager();
895 if (sm != null) {
896 checkPackageAccess(sm, pkgName.endsWith(".") ? pkgName : pkgName + ".");
897 }
898 }
899
900 /**
901 * Checks that the given package can be accessed from no permissions context.
902 *
903 * @param sm current security manager instance
904 * @param fullName fully qualified package name
905 * @throw SecurityException if not accessible
906 */
907 private static void checkPackageAccess(final SecurityManager sm, final String fullName) {
908 Objects.requireNonNull(sm);
909 final int index = fullName.lastIndexOf('.');
910 if (index != -1) {
911 final String pkgName = fullName.substring(0, index);
912 AccessController.doPrivileged(new PrivilegedAction<Void>() {
913 @Override
914 public Void run() {
915 sm.checkPackageAccess(pkgName);
916 return null;
917 }
918 }, NO_PERMISSIONS_ACC_CTXT);
919 }
920 }
921
922 /**
923 * Checks that the given Class can be accessed from no permissions context.
924 *
925 * @param clazz Class object
926 * @return true if package is accessible, false otherwise
927 */
928 private static boolean isAccessiblePackage(final Class<?> clazz) {
|