From 0aef05a5e495319e6cd6b8aead17225f618a81ff Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Thu, 10 Apr 2025 14:36:39 +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 --- .../java/com/script/rhino/RhinoCompiledScript.kt | 13 ++++++++++++- .../java/com/script/rhino/RhinoScriptEngine.kt | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/rhino/src/main/java/com/script/rhino/RhinoCompiledScript.kt b/modules/rhino/src/main/java/com/script/rhino/RhinoCompiledScript.kt index 4758639f6..12fe9c91b 100644 --- a/modules/rhino/src/main/java/com/script/rhino/RhinoCompiledScript.kt +++ b/modules/rhino/src/main/java/com/script/rhino/RhinoCompiledScript.kt @@ -56,7 +56,12 @@ internal class RhinoCompiledScript( override fun eval(scope: Scriptable, coroutineContext: CoroutineContext?): Any? { val cx = Context.enter() as RhinoContext - cx.checkRecursive() + try { + cx.checkRecursive() + } catch (e: RhinoRecursionError) { + Context.exit() + throw e + } val previousCoroutineContext = cx.coroutineContext if (coroutineContext != null && coroutineContext[Job] != null) { cx.coroutineContext = coroutineContext @@ -88,6 +93,12 @@ internal class RhinoCompiledScript( override suspend fun evalSuspend(scope: Scriptable): Any? { val cx = Context.enter() as RhinoContext + try { + cx.checkRecursive() + } catch (e: RhinoRecursionError) { + Context.exit() + throw e + } var ret: Any? withContext(VMBridgeReflect.contextLocal.asContextElement()) { cx.allowScriptRun = true diff --git a/modules/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt b/modules/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt index b38cf723b..7ee6b6c48 100644 --- a/modules/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt +++ b/modules/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt @@ -91,7 +91,12 @@ object RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable { coroutineContext: CoroutineContext? ): Any? { val cx = Context.enter() as RhinoContext - cx.checkRecursive() + try { + cx.checkRecursive() + } catch (e: RhinoRecursionError) { + Context.exit() + throw e + } val previousCoroutineContext = cx.coroutineContext if (coroutineContext != null && coroutineContext[Job] != null) { cx.coroutineContext = coroutineContext @@ -127,7 +132,12 @@ object RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable { @Throws(ContinuationPending::class) override suspend fun evalSuspend(reader: Reader, scope: Scriptable): Any? { val cx = Context.enter() as RhinoContext - cx.checkRecursive() + try { + cx.checkRecursive() + } catch (e: RhinoRecursionError) { + Context.exit() + throw e + } var ret: Any? withContext(VMBridgeReflect.contextLocal.asContextElement()) { cx.allowScriptRun = true