mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-03-23 19:10:21 +03:00
Fix VM stack corruption
This commit is contained in:
parent
aac91b6487
commit
439d3c75ab
@ -1699,7 +1699,9 @@ struct SquirrelSafeCheck
|
|||||||
|
|
||||||
~SquirrelSafeCheck()
|
~SquirrelSafeCheck()
|
||||||
{
|
{
|
||||||
if (top_ != (sq_gettop(vm_) - outputCount_))
|
SQInteger curtop = sq_gettop(vm_);
|
||||||
|
SQInteger diff = curtop - outputCount_;
|
||||||
|
if ( top_ != diff )
|
||||||
{
|
{
|
||||||
Assert(!"Squirrel VM stack is not consistent");
|
Assert(!"Squirrel VM stack is not consistent");
|
||||||
Error("Squirrel VM stack is not consistent\n");
|
Error("Squirrel VM stack is not consistent\n");
|
||||||
@ -2352,6 +2354,8 @@ bool SquirrelVM::ScopeIsHooked( HSCRIPT hScope, const char *pszEventName )
|
|||||||
if (!hScope)
|
if (!hScope)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
SquirrelSafeCheck safeCheck(vm_);
|
||||||
|
|
||||||
Assert(hScope != INVALID_HSCRIPT);
|
Assert(hScope != INVALID_HSCRIPT);
|
||||||
|
|
||||||
sq_pushroottable(vm_);
|
sq_pushroottable(vm_);
|
||||||
@ -2371,7 +2375,7 @@ bool SquirrelVM::ScopeIsHooked( HSCRIPT hScope, const char *pszEventName )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_pop(vm_, 3);
|
sq_pop(vm_, 4);
|
||||||
return val ? true : false;
|
return val ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2391,6 +2395,8 @@ HSCRIPT SquirrelVM::LookupHookFunction(const char *pszEventName, HSCRIPT hScope,
|
|||||||
if (!ScopeIsHooked(hScope, pszEventName))
|
if (!ScopeIsHooked(hScope, pszEventName))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
SquirrelSafeCheck safeCheck(vm_);
|
||||||
|
|
||||||
sq_pushroottable(vm_);
|
sq_pushroottable(vm_);
|
||||||
sq_pushstring(vm_, "Hooks", -1);
|
sq_pushstring(vm_, "Hooks", -1);
|
||||||
sq_get(vm_, -2);
|
sq_get(vm_, -2);
|
||||||
@ -2401,7 +2407,7 @@ HSCRIPT SquirrelVM::LookupHookFunction(const char *pszEventName, HSCRIPT hScope,
|
|||||||
sq_resetobject(&obj);
|
sq_resetobject(&obj);
|
||||||
sq_getstackobj(vm_, -1, &obj);
|
sq_getstackobj(vm_, -1, &obj);
|
||||||
sq_addref(vm_, &obj);
|
sq_addref(vm_, &obj);
|
||||||
sq_pop(vm_, 2);
|
sq_pop(vm_, 3);
|
||||||
|
|
||||||
HSQOBJECT* pObj = new HSQOBJECT;
|
HSQOBJECT* pObj = new HSQOBJECT;
|
||||||
*pObj = obj;
|
*pObj = obj;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user