Merge remote-tracking branch 'origin/master'

This commit is contained in:
kunfei 2023-06-15 22:03:18 +08:00
commit b1b3bace7a

View File

@ -29,7 +29,6 @@ import org.mozilla.javascript.NativeJavaObject
import org.mozilla.javascript.Scriptable import org.mozilla.javascript.Scriptable
import org.mozilla.javascript.WrapFactory import org.mozilla.javascript.WrapFactory
import java.lang.reflect.Member import java.lang.reflect.Member
import java.lang.reflect.Modifier
/** /**
* This wrap factory is used for security reasons. JSR 223 script * This wrap factory is used for security reasons. JSR 223 script
@ -52,50 +51,15 @@ object RhinoWrapFactory : WrapFactory() {
javaObject: Any, javaObject: Any,
staticType: Class<*>? staticType: Class<*>?
): Scriptable? { ): Scriptable? {
scope?.delete("Packages")
val sm = System.getSecurityManager()
val classShutter = RhinoClassShutter val classShutter = RhinoClassShutter
return if (javaObject is ClassLoader) { return when (javaObject) {
sm?.checkPermission(RuntimePermission("getClassLoader")) is ClassLoader, is Class<*>, is Member, is android.content.Context -> null
super.wrapAsJavaObject(cx, scope, javaObject, staticType) else -> {
} else { val name = javaObject.javaClass.name
var name: String? = null
if (javaObject is Class<*>) {
name = javaObject.name
} else if (javaObject is Member) {
if (sm != null && !Modifier.isPublic(javaObject.modifiers)) {
return null
}
name = javaObject.declaringClass.name
}
if (name != null) {
if (!classShutter.visibleToScripts(name)) null else super.wrapAsJavaObject(
cx,
scope,
javaObject,
staticType
)
} else {
var dynamicType: Class<*>? = javaObject.javaClass
name = dynamicType!!.name
if (classShutter.visibleToScripts(name)) { if (classShutter.visibleToScripts(name)) {
super.wrapAsJavaObject(cx, scope, javaObject, staticType) super.wrapAsJavaObject(cx, scope, javaObject, staticType)
} else { } else {
var type: Class<*>? = null null
if (staticType != null && staticType.isInterface) {
type = staticType
} else {
while (dynamicType != null) {
dynamicType = dynamicType.superclass
name = dynamicType.name
if (classShutter.visibleToScripts(name)) {
type = dynamicType
break
}
}
assert(type != null) { "java.lang.Object 不可访问" }
}
RhinoJavaObject(scope, javaObject, type)
} }
} }
} }