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)
|
SQInteger tostring_stub(HSQUIRRELVM vm)
|
||||||
{
|
{
|
||||||
ClassInstanceData* classInstanceData = nullptr;
|
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] = "";
|
char buffer[128] = "";
|
||||||
|
|
||||||
@ -1613,7 +1616,10 @@ SQInteger tostring_stub(HSQUIRRELVM vm)
|
|||||||
SQInteger get_stub(HSQUIRRELVM vm)
|
SQInteger get_stub(HSQUIRRELVM vm)
|
||||||
{
|
{
|
||||||
ClassInstanceData* classInstanceData = nullptr;
|
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;
|
const char* key = nullptr;
|
||||||
sq_getstring(vm, 2, &key);
|
sq_getstring(vm, 2, &key);
|
||||||
@ -1645,7 +1651,10 @@ SQInteger get_stub(HSQUIRRELVM vm)
|
|||||||
SQInteger set_stub(HSQUIRRELVM vm)
|
SQInteger set_stub(HSQUIRRELVM vm)
|
||||||
{
|
{
|
||||||
ClassInstanceData* classInstanceData = nullptr;
|
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;
|
const char* key = nullptr;
|
||||||
sq_getstring(vm, 2, &key);
|
sq_getstring(vm, 2, &key);
|
||||||
@ -2741,10 +2750,8 @@ void SquirrelVM::SetInstanceUniqeId(HSCRIPT hInstance, const char* pszId)
|
|||||||
HSQOBJECT* obj = (HSQOBJECT*)hInstance;
|
HSQOBJECT* obj = (HSQOBJECT*)hInstance;
|
||||||
sq_pushobject(vm_, *obj);
|
sq_pushobject(vm_, *obj);
|
||||||
|
|
||||||
SQUserPointer self;
|
ClassInstanceData* classInstanceData;
|
||||||
sq_getinstanceup(vm_, -1, &self, nullptr);
|
sq_getinstanceup(vm_, -1, (SQUserPointer*)&classInstanceData, nullptr);
|
||||||
|
|
||||||
auto classInstanceData = (ClassInstanceData*)self;
|
|
||||||
|
|
||||||
classInstanceData->instanceId = pszId;
|
classInstanceData->instanceId = pszId;
|
||||||
|
|
||||||
@ -2802,11 +2809,10 @@ void* SquirrelVM::GetInstanceValue(HSCRIPT hInstance, ScriptClassDesc_t* pExpect
|
|||||||
}
|
}
|
||||||
|
|
||||||
sq_pushobject(vm_, *obj);
|
sq_pushobject(vm_, *obj);
|
||||||
SQUserPointer self;
|
ClassInstanceData* classInstanceData;
|
||||||
sq_getinstanceup(vm_, -1, &self, nullptr);
|
sq_getinstanceup(vm_, -1, (SQUserPointer*)&classInstanceData, nullptr);
|
||||||
sq_pop(vm_, 1);
|
sq_pop(vm_, 1);
|
||||||
|
|
||||||
auto classInstanceData = (ClassInstanceData*)self;
|
|
||||||
|
|
||||||
if (!classInstanceData)
|
if (!classInstanceData)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user