Skip to content

Commit 11167f6

Browse files
committed
Fix (potential?) memory leaks from getVariant() (SquirrelVM)
Free values before assignment.
1 parent 82f664a commit 11167f6

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

sp/src/vscript/vscript_squirrel.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1205,6 +1205,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
12051205
{
12061206
case OT_NULL:
12071207
{
1208+
variant.Free();
12081209
variant.m_flags = 0;
12091210
// TODO: Should this be (HSCRIPT)nullptr
12101211
variant.m_type = FIELD_VOID;
@@ -1217,6 +1218,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
12171218
{
12181219
return false;
12191220
}
1221+
variant.Free();
12201222
variant = (int)val;
12211223
return true;
12221224
}
@@ -1227,6 +1229,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
12271229
{
12281230
return false;
12291231
}
1232+
variant.Free();
12301233
variant = (float)val;
12311234
return true;
12321235
}
@@ -1237,6 +1240,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
12371240
{
12381241
return false;
12391242
}
1243+
variant.Free();
12401244
variant = val ? true : false;
12411245
return true;
12421246
}
@@ -1248,6 +1252,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
12481252
{
12491253
return false;
12501254
}
1255+
variant.Free();
12511256
char* buffer = (char*)malloc(size + 1);
12521257
V_memcpy(buffer, val, size);
12531258
buffer[size] = 0;
@@ -1263,6 +1268,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
12631268
tag == TYPETAG_VECTOR &&
12641269
SQ_SUCCEEDED(sq_getinstanceup(vm, idx, (SQUserPointer*)&v, TYPETAG_VECTOR)))
12651270
{
1271+
variant.Free();
12661272
variant = (Vector*)malloc(sizeof(Vector));
12671273
new ((Vector*)variant.m_pVector) Vector(*v);
12681274
variant.m_flags |= SV_FREE;
@@ -1272,6 +1278,7 @@ bool getVariant(HSQUIRRELVM vm, SQInteger idx, ScriptVariant_t& variant)
12721278
}
12731279
default:
12741280
{
1281+
variant.Free();
12751282
HSQOBJECT* obj = new HSQOBJECT;
12761283
sq_resetobject(obj);
12771284
sq_getstackobj(vm, idx, obj);

0 commit comments

Comments
 (0)