From ee0d91235cf6c540ac69f9353db31a98d8052cb8 Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 15:51:58 +0300 Subject: [PATCH] =?UTF-8?q?fix(lua):=20=D0=BE=D0=B1=D1=91=D1=80=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=82=D0=B5=D0=BB=D0=B0=20=D1=81=D0=BA=D1=80?= =?UTF-8?q?=D0=B8=D0=BF=D1=82=D0=B0=20=D0=B2=20pcall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit memory access out of bounds в rbx_8 (Day/Night) — это WASM crash который пробивает try/catch на JS-стороне. Защита — pcall внутри самого Lua coroutine: даже если что-то падает в скрипте, ошибка ловится Lua-side и не доходит до уровня wasmoon resume. После этого fix остаётся только смотреть кто конкретно крашит — шлём ошибку через __rbxl_send_error и идём дальше. --- src/editor/engine/lua/LuaSharedSandbox.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/editor/engine/lua/LuaSharedSandbox.js b/src/editor/engine/lua/LuaSharedSandbox.js index ce0b15e..6446408 100644 --- a/src/editor/engine/lua/LuaSharedSandbox.js +++ b/src/editor/engine/lua/LuaSharedSandbox.js @@ -183,7 +183,15 @@ export class LuaSharedSandbox { Source = nil, } local co = coroutine.create(function() - ${entry.code} + -- pcall защищает от runtime-ошибок которые иначе крашат + -- coroutine и могут повредить WASM-стейт. Возвраты + -- handler'а намеренно поглощаются. + local ok_, err_ = pcall(function() + ${entry.code} + end) + if not ok_ then + __rbxl_send_error(${JSON.stringify(entry.id)}, tostring(err_)) + end end) __rbxl_register_coroutine(${JSON.stringify(entry.id)}, co) local ok, ret = coroutine.resume(co)