Horis 1 год назад
Родитель
Сommit
2e594619e1

+ 12 - 1
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

+ 12 - 2
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