From c851fc9bfbafb152a6a8ed91824475b15f7dd98f Mon Sep 17 00:00:00 2001 From: Alexander 'z33ky' Hirsch <1zeeky@gmail.com> Date: Wed, 11 Jun 2025 02:11:09 +0200 Subject: [PATCH] Ensure the squirrel instance for native member function call actually has userpointer type This prevents memory errors when incorrectly invoking native member functions from Squirrel. --- sp/src/vscript/vscript_squirrel.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sp/src/vscript/vscript_squirrel.cpp b/sp/src/vscript/vscript_squirrel.cpp index 93008683..584402a1 100644 --- a/sp/src/vscript/vscript_squirrel.cpp +++ b/sp/src/vscript/vscript_squirrel.cpp @@ -1324,7 +1324,10 @@ SQInteger function_stub(HSQUIRRELVM vm) SQInteger top = sq_gettop(vm); SQUserPointer userptr = nullptr; - sq_getuserpointer(vm, top, &userptr); + if (SQ_FAILED(sq_getuserpointer(vm, top, &userptr))) + { + return sq_throwerror(vm, "Expected userpointer"); + } Assert(userptr); @@ -1425,7 +1428,10 @@ SQInteger function_stub(HSQUIRRELVM vm) if (pFunc->m_flags & SF_MEMBER_FUNC) { SQUserPointer self; - sq_getinstanceup(vm, 1, &self, nullptr); + if (SQ_FAILED(sq_getinstanceup(vm, 1, &self, 0))) + { + return sq_throwerror(vm, "Expected class userpointer"); + } if (!self) {