From 614ec3fcbce794384974e788691fc3e281b5647f Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 25 Mar 2023 13:06:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rhino/build.gradle | 2 +- .../com/script/rhino/RhinoClassShutter.kt | 29 +++++++------------ .../com/script/rhino/RhinoScriptEngine.kt | 12 ++++++-- .../java/com/script/rhino/RhinoWrapFactory.kt | 17 ++--------- 4 files changed, 22 insertions(+), 38 deletions(-) diff --git a/rhino/build.gradle b/rhino/build.gradle index ae6d5af3f..2a25cc693 100644 --- a/rhino/build.gradle +++ b/rhino/build.gradle @@ -35,5 +35,5 @@ android { } dependencies { - api(fileTree(dir: 'lib', include: ['rhino-1.7.13-2.jar'])) + api(fileTree(dir: 'lib', include: ['rhino-1.7.14-2.jar'])) } \ No newline at end of file diff --git a/rhino/src/main/java/com/script/rhino/RhinoClassShutter.kt b/rhino/src/main/java/com/script/rhino/RhinoClassShutter.kt index b4463c7e6..330b7d391 100644 --- a/rhino/src/main/java/com/script/rhino/RhinoClassShutter.kt +++ b/rhino/src/main/java/com/script/rhino/RhinoClassShutter.kt @@ -34,7 +34,16 @@ import org.mozilla.javascript.ClassShutter * @author A. Sundararajan * @since 1.6 */ -internal class RhinoClassShutter private constructor() : ClassShutter { +object RhinoClassShutter : ClassShutter { + + private val protectedClasses by lazy { + val protectedClasses = HashMap() + protectedClasses["java.lang.Runtime"] = java.lang.Boolean.TRUE + protectedClasses["java.io.File"] = java.lang.Boolean.TRUE + protectedClasses["java.security.AccessController"] = java.lang.Boolean.TRUE + protectedClasses + } + override fun visibleToScripts(fullClassName: String): Boolean { val sm = System.getSecurityManager() if (sm != null) { @@ -50,22 +59,4 @@ internal class RhinoClassShutter private constructor() : ClassShutter { return protectedClasses[fullClassName] == null } - companion object { - - @JvmStatic - val protectedClasses by lazy { - val protectedClasses = HashMap() - protectedClasses["java.lang.Runtime"] = java.lang.Boolean.TRUE - protectedClasses["java.io.File"] = java.lang.Boolean.TRUE - protectedClasses["java.security.AccessController"] = java.lang.Boolean.TRUE - protectedClasses - } - - @JvmStatic - val instance: ClassShutter by lazy { - val theInstance = RhinoClassShutter() - theInstance - } - - } } \ No newline at end of file diff --git a/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt b/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt index d69494767..27d896098 100644 --- a/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt +++ b/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt @@ -25,7 +25,6 @@ package com.script.rhino import com.script.* -import com.script.rhino.RhinoClassShutter.Companion.instance import org.intellij.lang.annotations.Language import org.mozilla.javascript.* import org.mozilla.javascript.Function @@ -331,11 +330,18 @@ class RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable { val cx = super.makeContext() cx.languageVersion = 200 cx.optimizationLevel = -1 - cx.setClassShutter(instance) - cx.wrapFactory = RhinoWrapFactory.instance + cx.setClassShutter(RhinoClassShutter) + cx.wrapFactory = RhinoWrapFactory return cx } + override fun hasFeature(cx: Context?, featureIndex: Int): Boolean { + if (featureIndex == Context.FEATURE_ENABLE_JAVA_MAP_ACCESS) { + return true + } + return super.hasFeature(cx, featureIndex) + } + override fun doTopCall( callable: Callable, cx: Context, diff --git a/rhino/src/main/java/com/script/rhino/RhinoWrapFactory.kt b/rhino/src/main/java/com/script/rhino/RhinoWrapFactory.kt index a09ec027a..f59f06629 100644 --- a/rhino/src/main/java/com/script/rhino/RhinoWrapFactory.kt +++ b/rhino/src/main/java/com/script/rhino/RhinoWrapFactory.kt @@ -44,7 +44,7 @@ import java.lang.reflect.Modifier * @author A. Sundararajan * @since 1.6 */ -internal class RhinoWrapFactory private constructor() : WrapFactory() { +object RhinoWrapFactory : WrapFactory() { override fun wrapAsJavaObject( cx: Context, @@ -54,7 +54,7 @@ internal class RhinoWrapFactory private constructor() : WrapFactory() { ): Scriptable? { scope?.delete("Packages") val sm = System.getSecurityManager() - val classShutter = RhinoClassShutter.instance + val classShutter = RhinoClassShutter return if (javaObject is ClassLoader) { sm?.checkPermission(RuntimePermission("getClassLoader")) super.wrapAsJavaObject(cx, scope, javaObject, staticType) @@ -115,17 +115,4 @@ internal class RhinoWrapFactory private constructor() : WrapFactory() { } } - companion object { - private var theInstance: RhinoWrapFactory? = null - - @JvmStatic - @get:Synchronized - val instance: WrapFactory? - get() { - if (theInstance == null) { - theInstance = RhinoWrapFactory() - } - return theInstance - } - } } \ No newline at end of file