Allow null returns from SecuritySupport methods if someone only

wants to implement LiveConnect filtering
This commit is contained in:
nboyd%atg.com 2000-09-29 13:49:47 +00:00
Родитель 3e5ae4d5dc
Коммит d52574f9e0
6 изменённых файлов: 50 добавлений и 42 удалений

Просмотреть файл

@ -1754,14 +1754,16 @@ public final class Context {
Object result = null; Object result = null;
if (securitySupport != null) { if (securitySupport != null) {
Class[] classes = securitySupport.getClassContext(); Class[] classes = securitySupport.getClassContext();
if (depth != -1) { if (classes != null) {
int depth1 = depth + 1; if (depth != -1) {
result = getSecurityDomainFromClass(classes[depth1]); int depth1 = depth + 1;
} else { result = getSecurityDomainFromClass(classes[depth1]);
for (int i=1; i < classes.length; i++) { } else {
result = getSecurityDomainFromClass(classes[i]); for (int i=1; i < classes.length; i++) {
if (result != null) result = getSecurityDomainFromClass(classes[i]);
break; if (result != null)
break;
}
} }
} }
} }

Просмотреть файл

@ -283,17 +283,18 @@ public class JavaAdapter extends ScriptableObject {
SecuritySupport ss = cx.getSecuritySupport(); SecuritySupport ss = cx.getSecuritySupport();
if (ss != null) { if (ss != null) {
Object securityDomain = cx.getSecurityDomainForStackDepth(-1); Object securityDomain = cx.getSecurityDomainForStackDepth(-1);
return ss.defineClass(adapterName, bytes, securityDomain); Class result = ss.defineClass(adapterName, bytes, securityDomain);
} else { if (result != null)
if (classLoader == null) return result;
classLoader = new MyClassLoader();
classLoader.defineClass(adapterName, bytes);
return classLoader.loadClass(adapterName, true);
} }
if (classLoader == null)
classLoader = new MyClassLoader();
classLoader.defineClass(adapterName, bytes);
return classLoader.loadClass(adapterName, true);
} }
/** /**
* Utility method, which dynamically binds a Context to the current thread, * Utility method which dynamically binds a Context to the current thread,
* if none already exists. * if none already exists.
*/ */
public static Object callMethod(Scriptable object, Object thisObj, public static Object callMethod(Scriptable object, Object thisObj,

Просмотреть файл

@ -118,17 +118,18 @@ public class Codegen extends Interpreter {
} }
} }
try { try {
Class clazz; Class clazz = null;
if (securitySupport == null) { if (securitySupport != null) {
clazz = securitySupport.defineClass(name, classFile,
securityDomain);
}
if (clazz == null) {
Context.checkSecurityDomainRequired(); Context.checkSecurityDomainRequired();
if (classLoader == null) if (classLoader == null)
classLoader = new JavaScriptClassLoader(); classLoader = new JavaScriptClassLoader();
clazz = classLoader.defineClass(name, classFile); clazz = classLoader.defineClass(name, classFile);
ClassLoader loader = clazz.getClassLoader(); ClassLoader loader = clazz.getClassLoader();
clazz = loader.loadClass(name); clazz = loader.loadClass(name);
} else {
clazz = securitySupport.defineClass(name, classFile,
securityDomain);
} }
if (name.equals(generatedName)) if (name.equals(generatedName))
result = clazz; result = clazz;

Просмотреть файл

@ -1754,14 +1754,16 @@ public final class Context {
Object result = null; Object result = null;
if (securitySupport != null) { if (securitySupport != null) {
Class[] classes = securitySupport.getClassContext(); Class[] classes = securitySupport.getClassContext();
if (depth != -1) { if (classes != null) {
int depth1 = depth + 1; if (depth != -1) {
result = getSecurityDomainFromClass(classes[depth1]); int depth1 = depth + 1;
} else { result = getSecurityDomainFromClass(classes[depth1]);
for (int i=1; i < classes.length; i++) { } else {
result = getSecurityDomainFromClass(classes[i]); for (int i=1; i < classes.length; i++) {
if (result != null) result = getSecurityDomainFromClass(classes[i]);
break; if (result != null)
break;
}
} }
} }
} }

Просмотреть файл

@ -283,17 +283,18 @@ public class JavaAdapter extends ScriptableObject {
SecuritySupport ss = cx.getSecuritySupport(); SecuritySupport ss = cx.getSecuritySupport();
if (ss != null) { if (ss != null) {
Object securityDomain = cx.getSecurityDomainForStackDepth(-1); Object securityDomain = cx.getSecurityDomainForStackDepth(-1);
return ss.defineClass(adapterName, bytes, securityDomain); Class result = ss.defineClass(adapterName, bytes, securityDomain);
} else { if (result != null)
if (classLoader == null) return result;
classLoader = new MyClassLoader();
classLoader.defineClass(adapterName, bytes);
return classLoader.loadClass(adapterName, true);
} }
if (classLoader == null)
classLoader = new MyClassLoader();
classLoader.defineClass(adapterName, bytes);
return classLoader.loadClass(adapterName, true);
} }
/** /**
* Utility method, which dynamically binds a Context to the current thread, * Utility method which dynamically binds a Context to the current thread,
* if none already exists. * if none already exists.
*/ */
public static Object callMethod(Scriptable object, Object thisObj, public static Object callMethod(Scriptable object, Object thisObj,

Просмотреть файл

@ -118,17 +118,18 @@ public class Codegen extends Interpreter {
} }
} }
try { try {
Class clazz; Class clazz = null;
if (securitySupport == null) { if (securitySupport != null) {
clazz = securitySupport.defineClass(name, classFile,
securityDomain);
}
if (clazz == null) {
Context.checkSecurityDomainRequired(); Context.checkSecurityDomainRequired();
if (classLoader == null) if (classLoader == null)
classLoader = new JavaScriptClassLoader(); classLoader = new JavaScriptClassLoader();
clazz = classLoader.defineClass(name, classFile); clazz = classLoader.defineClass(name, classFile);
ClassLoader loader = clazz.getClassLoader(); ClassLoader loader = clazz.getClassLoader();
clazz = loader.loadClass(name); clazz = loader.loadClass(name);
} else {
clazz = securitySupport.defineClass(name, classFile,
securityDomain);
} }
if (name.equals(generatedName)) if (name.equals(generatedName))
result = clazz; result = clazz;