зеркало из https://github.com/mozilla/gecko-dev.git
Allow null returns from SecuritySupport methods if someone only
wants to implement LiveConnect filtering
This commit is contained in:
Родитель
3e5ae4d5dc
Коммит
d52574f9e0
|
@ -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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче