diff --git a/source/amx/amxcons.c b/source/amx/amxcons.c index 51cd3278..0890907e 100644 --- a/source/amx/amxcons.c +++ b/source/amx/amxcons.c @@ -865,8 +865,10 @@ int amx_printstring(AMX *amx,cell *cstr,AMX_FMTINFO *info) break; case 0: assert(info!=NULL && info->params!=NULL); - if (paramidx>=info->numparams) /* insufficient parameters passed */ + if (paramidx>=info->numparams) { /* insufficient parameters passed */ amx_RaiseError(amx, AMX_ERR_NATIVE); + return paramidx - 1; + } break; } /* switch */ if (j==0) @@ -888,8 +890,10 @@ int amx_printstring(AMX *amx,cell *cstr,AMX_FMTINFO *info) break; case 0: assert(info!=NULL && info->params!=NULL); - if (paramidx>=info->numparams) /* insufficient parameters passed */ + if (paramidx>=info->numparams) { /* insufficient parameters passed */ amx_RaiseError(amx, AMX_ERR_NATIVE); + return paramidx - 1; + } break; } /* switch */ } /* for */ @@ -897,6 +901,14 @@ int amx_printstring(AMX *amx,cell *cstr,AMX_FMTINFO *info) } /* if (info==NULL || info->params==NULL) */ + if( + info != NULL + && paramidx < info->numparams + ) { + amx_RaiseError(amx, AMX_ERR_NATIVE); + return INT_MAX; + } + return paramidx; } diff --git a/source/amx/amxstring.c b/source/amx/amxstring.c index e1ff9a41..2d2d4734 100644 --- a/source/amx/amxstring.c +++ b/source/amx/amxstring.c @@ -570,6 +570,8 @@ static cell AMX_NATIVE_CALL n_strval(AMX *amx,const cell *params) /* get parameters */ amx_GetAddr(amx,params[1],&cstr); amx_StrLen(cstr,&len); + if (len == 0) + return 0; if ((unsigned)params[0]>=2*sizeof(cell)) offset=params[2]; if (offset<0)