add some stack-condition error checking to sqstdlib registration routines and to sqstd_dofile

This commit is contained in:
zeromus 2016-04-20 21:19:24 -05:00
parent 72135d9a7f
commit b9fc931752
4 changed files with 12 additions and 0 deletions

View File

@ -399,6 +399,10 @@ SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
SQRESULT sqstd_dofile(HSQUIRRELVM v,const SQChar *filename,SQBool retval,SQBool printerror)
{
//at least one entry must exist in order for us to push it as the environment
if(sq_gettop(v) == 0)
return sq_throwerror(v,_SC("environment table expected"));
if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,printerror))) {
sq_push(v,-2);
if(SQ_SUCCEEDED(sq_call(v,1,retval,SQTrue))) {
@ -468,6 +472,8 @@ static const SQRegFunction iolib_funcs[]={
SQRESULT sqstd_register_iolib(HSQUIRRELVM v)
{
if(sq_gettype(v,-1) != OT_TABLE)
return sq_throwerror(v,_SC("table expected"));
SQInteger top = sq_gettop(v);
//create delegate
declare_stream(v,_SC("file"),(SQUserPointer)SQSTD_FILE_TYPE_TAG,_SC("std_file"),_file_methods,iolib_funcs);

View File

@ -88,6 +88,8 @@ static const SQRegFunction mathlib_funcs[] = {
SQRESULT sqstd_register_mathlib(HSQUIRRELVM v)
{
if(sq_gettype(v,-1) != OT_TABLE)
return sq_throwerror(v,_SC("table expected"));
SQInteger i=0;
while(mathlib_funcs[i].name!=0) {
sq_pushstring(v,mathlib_funcs[i].name,-1);

View File

@ -473,6 +473,8 @@ static const SQRegFunction stringlib_funcs[]={
SQInteger sqstd_register_stringlib(HSQUIRRELVM v)
{
if(sq_gettype(v,-1) != OT_TABLE)
return sq_throwerror(v,_SC("table expected"));
sq_pushstring(v,_SC("regexp"),-1);
sq_newclass(v,SQFalse);
SQInteger i = 0;

View File

@ -132,6 +132,8 @@ static const SQRegFunction systemlib_funcs[]={
SQInteger sqstd_register_systemlib(HSQUIRRELVM v)
{
if(sq_gettype(v,-1) != OT_TABLE)
return sq_throwerror(v,_SC("table expected"));
SQInteger i=0;
while(systemlib_funcs[i].name!=0)
{