mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-03-04 17:55:28 +03:00
Fix (potential?) memory leaks from getVariant() (SquirrelVM)
Free values before assignment.
This commit is contained in:
parent
fe82da8f1b
commit
a2e43a567f
@ -497,6 +497,7 @@ struct ScriptVariant_t
|
|||||||
|
|
||||||
bool AssignTo( ScriptVariant_t *pDest )
|
bool AssignTo( ScriptVariant_t *pDest )
|
||||||
{
|
{
|
||||||
|
pDest->Free();
|
||||||
pDest->m_type = m_type;
|
pDest->m_type = m_type;
|
||||||
if ( m_flags & SV_FREE )
|
if ( m_flags & SV_FREE )
|
||||||
{
|
{
|
||||||
|
@ -1205,6 +1205,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
|
|||||||
{
|
{
|
||||||
case OT_NULL:
|
case OT_NULL:
|
||||||
{
|
{
|
||||||
|
variant.Free();
|
||||||
variant.m_flags = 0;
|
variant.m_flags = 0;
|
||||||
// TODO: Should this be (HSCRIPT)nullptr
|
// TODO: Should this be (HSCRIPT)nullptr
|
||||||
variant.m_type = FIELD_VOID;
|
variant.m_type = FIELD_VOID;
|
||||||
@ -1217,6 +1218,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
variant.Free();
|
||||||
variant = (int)val;
|
variant = (int)val;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1227,6 +1229,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
variant.Free();
|
||||||
variant = (float)val;
|
variant = (float)val;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1237,6 +1240,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
variant.Free();
|
||||||
variant = val ? true : false;
|
variant = val ? true : false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1248,6 +1252,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
variant.Free();
|
||||||
char* buffer = (char*)malloc(size + 1);
|
char* buffer = (char*)malloc(size + 1);
|
||||||
V_memcpy(buffer, val, size);
|
V_memcpy(buffer, val, size);
|
||||||
buffer[size] = 0;
|
buffer[size] = 0;
|
||||||
@ -1263,6 +1268,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
|
|||||||
tag == TYPETAG_VECTOR &&
|
tag == TYPETAG_VECTOR &&
|
||||||
SQ_SUCCEEDED(sq_getinstanceup(vm, idx, (SQUserPointer*)&v, TYPETAG_VECTOR)))
|
SQ_SUCCEEDED(sq_getinstanceup(vm, idx, (SQUserPointer*)&v, TYPETAG_VECTOR)))
|
||||||
{
|
{
|
||||||
|
variant.Free();
|
||||||
variant = (Vector*)malloc(sizeof(Vector));
|
variant = (Vector*)malloc(sizeof(Vector));
|
||||||
variant.EmplaceAllocedVector(*v);
|
variant.EmplaceAllocedVector(*v);
|
||||||
variant.m_flags |= SV_FREE;
|
variant.m_flags |= SV_FREE;
|
||||||
@ -1272,6 +1278,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
variant.Free();
|
||||||
HSQOBJECT* obj = new HSQOBJECT;
|
HSQOBJECT* obj = new HSQOBJECT;
|
||||||
sq_resetobject(obj);
|
sq_resetobject(obj);
|
||||||
sq_getstackobj(vm, idx, obj);
|
sq_getstackobj(vm, idx, obj);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user