From 005ff070318f3626e1050d2f434074039ba1ef00 Mon Sep 17 00:00:00 2001 From: Akeit0 <90429982+Akeit0@users.noreply.github.com> Date: Thu, 13 Feb 2025 18:52:59 +0900 Subject: [PATCH 1/2] Fix: unintended `index out of range exception` on other exception --- src/Lua/Runtime/LuaVirtualMachine.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Lua/Runtime/LuaVirtualMachine.cs b/src/Lua/Runtime/LuaVirtualMachine.cs index d0ff6ae3..9ccb990e 100644 --- a/src/Lua/Runtime/LuaVirtualMachine.cs +++ b/src/Lua/Runtime/LuaVirtualMachine.cs @@ -932,16 +932,18 @@ static bool MoveNext(ref VirtualMachineExecutionContext context, out PostOperati } catch (Exception e) { - context.PopOnTopCallStackFrames(); + context.State.CloseUpValues(context.Thread, context.FrameBase); LuaValueArrayPool.Return1024(context.ResultsBuffer, true); if (e is not LuaRuntimeException) { - var newException = new LuaRuntimeException(GetTracebacks(ref context), e); + var newException = new LuaRuntimeException(context.State.GetTraceback(), e); context = default; + context.PopOnTopCallStackFrames(); throw newException; } + context.PopOnTopCallStackFrames(); throw; } } From b94c6747988757dd4dda1000162f0baca1f0bc07 Mon Sep 17 00:00:00 2001 From: Akeit0 <90429982+Akeit0@users.noreply.github.com> Date: Thu, 13 Feb 2025 19:05:09 +0900 Subject: [PATCH 2/2] Fix: reset order --- src/Lua/Runtime/LuaVirtualMachine.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Lua/Runtime/LuaVirtualMachine.cs b/src/Lua/Runtime/LuaVirtualMachine.cs index 9ccb990e..5f07a447 100644 --- a/src/Lua/Runtime/LuaVirtualMachine.cs +++ b/src/Lua/Runtime/LuaVirtualMachine.cs @@ -932,14 +932,13 @@ static bool MoveNext(ref VirtualMachineExecutionContext context, out PostOperati } catch (Exception e) { - context.State.CloseUpValues(context.Thread, context.FrameBase); LuaValueArrayPool.Return1024(context.ResultsBuffer, true); if (e is not LuaRuntimeException) { var newException = new LuaRuntimeException(context.State.GetTraceback(), e); - context = default; context.PopOnTopCallStackFrames(); + context = default; throw newException; }