Add type check for script helper assignments from ScriptVariant_t

This commit is contained in:
Alexander 'z33ky' Hirsch 2024-11-18 15:03:09 +01:00
parent cbb60e1afd
commit c0e12a2f58
3 changed files with 14 additions and 18 deletions

View File

@ -560,16 +560,18 @@ bool CAnimEventTInstanceHelper::Set( void *p, const char *pszKey, ScriptVariant_
animevent_t *ani = ((animevent_t *)p); animevent_t *ani = ((animevent_t *)p);
if (FStrEq( pszKey, "event" )) if (FStrEq( pszKey, "event" ))
ani->event = variant; return variant.AssignTo( &ani->event );
else if (FStrEq( pszKey, "options" )) else if (FStrEq( pszKey, "options" ))
ani->options = variant; // broken: return variant.AssignTo( &ani->options );
// variant memory is freed afterwards
return false;
else if (FStrEq( pszKey, "cycle" )) else if (FStrEq( pszKey, "cycle" ))
ani->cycle = variant; return variant.AssignTo( &ani->cycle );
else if (FStrEq( pszKey, "eventtime" )) else if (FStrEq( pszKey, "eventtime" ))
ani->eventtime = variant; return variant.AssignTo( &ani->eventtime );
else if (FStrEq( pszKey, "type" )) else if (FStrEq( pszKey, "type" ))
ani->type = variant; return variant.AssignTo( &ani->type );
else if (FStrEq( pszKey, "source" )) else if (FStrEq( pszKey, "source" ) && variant.m_type == FIELD_HSCRIPT)
{ {
CBaseEntity *pEnt = ToEnt( variant.m_hScript ); CBaseEntity *pEnt = ToEnt( variant.m_hScript );
if (pEnt) if (pEnt)

View File

@ -440,13 +440,11 @@ bool CScriptColorInstanceHelper::Get( void *p, const char *pszKey, ScriptVariant
bool CScriptColorInstanceHelper::Set( void *p, const char *pszKey, ScriptVariant_t &variant ) bool CScriptColorInstanceHelper::Set( void *p, const char *pszKey, ScriptVariant_t &variant )
{ {
Color *pClr = ((Color *)p); Color *pClr = ((Color *)p);
if ( strlen(pszKey) == 1 ) int iVal;
if ( strlen(pszKey) == 1 && variant.AssignTo( &iVal ) )
{ {
int iVal;
variant.AssignTo( &iVal );
switch (pszKey[0]) switch (pszKey[0])
{ {
// variant.AssignTo( &(*pClr)[0] );
case 'r': case 'r':
(*pClr)[0] = iVal; (*pClr)[0] = iVal;
return true; return true;

View File

@ -259,17 +259,13 @@ bool CScriptQuaternionInstanceHelper::Set( void *p, const char *pszKey, ScriptVa
switch (pszKey[0]) switch (pszKey[0])
{ {
case 'x': case 'x':
variant.AssignTo( &pQuat->x ); return variant.AssignTo( &pQuat->x );
return true;
case 'y': case 'y':
variant.AssignTo( &pQuat->y ); return variant.AssignTo( &pQuat->y );
return true;
case 'z': case 'z':
variant.AssignTo( &pQuat->z ); return variant.AssignTo( &pQuat->z );
return true;
case 'w': case 'w':
variant.AssignTo( &pQuat->w ); return variant.AssignTo( &pQuat->w );
return true;
} }
} }
return false; return false;