Skip to content

Commit bc412a3

Browse files
committed
Check type of Squirrel constructor_stub() instance
This prevents manual invocations of the native class constructor with an invalid value.
1 parent dc0cfaa commit bc412a3

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

sp/src/vscript/vscript_squirrel.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,15 +1559,17 @@ SQInteger constructor_stub(HSQUIRRELVM vm)
15591559
Assert(pSquirrelVM);
15601560

15611561
sq_resetobject(&pSquirrelVM->lastError_);
1562+
{
1563+
SQUserPointer p;
1564+
if (SQ_FAILED(sq_getinstanceup(vm, 1, &p, 0))) {
1565+
return sq_throwerror(vm, "Expected class userpointer");
1566+
}
15621567

1563-
void* instance = pClassDesc->m_pfnConstruct();
1568+
void* instance = pClassDesc->m_pfnConstruct();
15641569

1565-
// expect construction to always succeed
1566-
Assert(sq_isnull(pSquirrelVM->lastError_));
1570+
// expect construction to always succeed
1571+
Assert(sq_isnull(pSquirrelVM->lastError_));
15671572

1568-
{
1569-
SQUserPointer p;
1570-
sq_getinstanceup(vm, 1, &p, 0);
15711573
new(p) ClassInstanceData(instance, pClassDesc, nullptr, true);
15721574
}
15731575

0 commit comments

Comments
 (0)