mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-07-27 07:31:49 +03:00
Guard get/set/tostring_stub() against illegal Squirrel instances
Also streamline SQUserPointer usage in sq_getinstanceup() and sq_getuserpointer() calls to write directly to a pointer of the expected type.
This commit is contained in:
parent
9c38e4e295
commit
3301edc54d
@ -1583,7 +1583,10 @@ SQInteger constructor_stub(HSQUIRRELVM vm)
|
||||
SQInteger tostring_stub(HSQUIRRELVM vm)
|
||||
{
|
||||
ClassInstanceData* classInstanceData = nullptr;
|
||||
sq_getinstanceup(vm, 1, (SQUserPointer*)&classInstanceData, 0);
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 1, (SQUserPointer*)&classInstanceData, 0)))
|
||||
{
|
||||
return SQ_ERROR;
|
||||
}
|
||||
|
||||
char buffer[128] = "";
|
||||
|
||||
@ -1613,7 +1616,10 @@ SQInteger tostring_stub(HSQUIRRELVM vm)
|
||||
SQInteger get_stub(HSQUIRRELVM vm)
|
||||
{
|
||||
ClassInstanceData* classInstanceData = nullptr;
|
||||
sq_getinstanceup(vm, 1, (SQUserPointer*)&classInstanceData, 0);
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 1, (SQUserPointer*)&classInstanceData, 0)))
|
||||
{
|
||||
return SQ_ERROR;
|
||||
}
|
||||
|
||||
const char* key = nullptr;
|
||||
sq_getstring(vm, 2, &key);
|
||||
@ -1645,7 +1651,10 @@ SQInteger get_stub(HSQUIRRELVM vm)
|
||||
SQInteger set_stub(HSQUIRRELVM vm)
|
||||
{
|
||||
ClassInstanceData* classInstanceData = nullptr;
|
||||
sq_getinstanceup(vm, 1, (SQUserPointer*)&classInstanceData, 0);
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 1, (SQUserPointer*)&classInstanceData, 0)))
|
||||
{
|
||||
return SQ_ERROR;
|
||||
}
|
||||
|
||||
const char* key = nullptr;
|
||||
sq_getstring(vm, 2, &key);
|
||||
@ -2741,10 +2750,8 @@ void SquirrelVM::SetInstanceUniqeId(HSCRIPT hInstance, const char* pszId)
|
||||
HSQOBJECT* obj = (HSQOBJECT*)hInstance;
|
||||
sq_pushobject(vm_, *obj);
|
||||
|
||||
SQUserPointer self;
|
||||
sq_getinstanceup(vm_, -1, &self, nullptr);
|
||||
|
||||
auto classInstanceData = (ClassInstanceData*)self;
|
||||
ClassInstanceData* classInstanceData;
|
||||
sq_getinstanceup(vm_, -1, (SQUserPointer*)&classInstanceData, nullptr);
|
||||
|
||||
classInstanceData->instanceId = pszId;
|
||||
|
||||
@ -2802,11 +2809,10 @@ void* SquirrelVM::GetInstanceValue(HSCRIPT hInstance, ScriptClassDesc_t* pExpect
|
||||
}
|
||||
|
||||
sq_pushobject(vm_, *obj);
|
||||
SQUserPointer self;
|
||||
sq_getinstanceup(vm_, -1, &self, nullptr);
|
||||
ClassInstanceData* classInstanceData;
|
||||
sq_getinstanceup(vm_, -1, (SQUserPointer*)&classInstanceData, nullptr);
|
||||
sq_pop(vm_, 1);
|
||||
|
||||
auto classInstanceData = (ClassInstanceData*)self;
|
||||
|
||||
if (!classInstanceData)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user