Fix storing garbage strings (#2257)

This commit is contained in:
Benoist 2025-02-19 13:10:37 +01:00 committed by GitHub
parent 6cd5bf87d8
commit 3b9c74ce96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 34 additions and 27 deletions

View File

@ -240,15 +240,10 @@ void CreateHashMaps()
if (!pSchema) if (!pSchema)
return; return;
static const char *pPriceKey = NULL; const char *pPriceKey = g_pGameConf->GetKeyValue("PriceKey");
if (!pPriceKey) if (!pPriceKey)
{ {
pPriceKey = g_pGameConf->GetKeyValue("PriceKey"); return;
if (!pPriceKey)
{
return;
}
} }
static int iHashMapOffset = -1; static int iHashMapOffset = -1;

View File

@ -33,11 +33,16 @@
#include "gamerulesnatives.h" #include "gamerulesnatives.h"
#include "vglobals.h" #include "vglobals.h"
const char *g_szGameRulesProxy; char g_szGameRulesProxy[64] = { 0 };
void GameRulesNativesInit() void GameRulesNativesInit()
{ {
g_szGameRulesProxy = g_pGameConf->GetKeyValue("GameRulesProxy"); auto key = g_pGameConf->GetKeyValue("GameRulesProxy");
if (key)
{
strncpy(g_szGameRulesProxy, key, sizeof(g_szGameRulesProxy));
g_szGameRulesProxy[sizeof(g_szGameRulesProxy) - 1] = '\0';
}
} }
static CBaseEntity *FindEntityByNetClass(int start, const char *classname) static CBaseEntity *FindEntityByNetClass(int start, const char *classname)
@ -202,7 +207,7 @@ static cell_t GameRules_GetProp(IPluginContext *pContext, const cell_t *params)
void *pGameRules = GameRules(); void *pGameRules = GameRules();
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -274,7 +279,7 @@ static cell_t GameRules_SetProp(IPluginContext *pContext, const cell_t *params)
if ((pProxy = GetGameRulesProxyEnt()) == NULL) if ((pProxy = GetGameRulesProxyEnt()) == NULL)
return pContext->ThrowNativeError("Couldn't find gamerules proxy entity"); return pContext->ThrowNativeError("Couldn't find gamerules proxy entity");
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed"); return pContext->ThrowNativeError("Gamerules lookup failed");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -335,7 +340,7 @@ static cell_t GameRules_GetPropFloat(IPluginContext *pContext, const cell_t *par
void *pGameRules = GameRules(); void *pGameRules = GameRules();
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -360,7 +365,7 @@ static cell_t GameRules_SetPropFloat(IPluginContext *pContext, const cell_t *par
if ((pProxy = GetGameRulesProxyEnt()) == NULL) if ((pProxy = GetGameRulesProxyEnt()) == NULL)
return pContext->ThrowNativeError("Couldn't find gamerules proxy entity."); return pContext->ThrowNativeError("Couldn't find gamerules proxy entity.");
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -394,7 +399,7 @@ static cell_t GameRules_GetPropEnt(IPluginContext *pContext, const cell_t *param
void *pGameRules = GameRules(); void *pGameRules = GameRules();
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -425,7 +430,7 @@ static cell_t GameRules_SetPropEnt(IPluginContext *pContext, const cell_t *param
if ((pProxy = GetGameRulesProxyEnt()) == NULL) if ((pProxy = GetGameRulesProxyEnt()) == NULL)
return pContext->ThrowNativeError("Couldn't find gamerules proxy entity."); return pContext->ThrowNativeError("Couldn't find gamerules proxy entity.");
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -475,7 +480,7 @@ static cell_t GameRules_GetPropVector(IPluginContext *pContext, const cell_t *pa
void *pGameRules = GameRules(); void *pGameRules = GameRules();
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -507,7 +512,7 @@ static cell_t GameRules_SetPropVector(IPluginContext *pContext, const cell_t *pa
if ((pProxy = GetGameRulesProxyEnt()) == NULL) if ((pProxy = GetGameRulesProxyEnt()) == NULL)
return pContext->ThrowNativeError("Couldn't find gamerules proxy entity."); return pContext->ThrowNativeError("Couldn't find gamerules proxy entity.");
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -551,7 +556,7 @@ static cell_t GameRules_GetPropString(IPluginContext *pContext, const cell_t *pa
void *pGameRules = GameRules(); void *pGameRules = GameRules();
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);
@ -600,7 +605,7 @@ static cell_t GameRules_SetPropString(IPluginContext *pContext, const cell_t *pa
if ((pProxy = GetGameRulesProxyEnt()) == NULL) if ((pProxy = GetGameRulesProxyEnt()) == NULL)
return pContext->ThrowNativeError("Couldn't find gamerules proxy entity."); return pContext->ThrowNativeError("Couldn't find gamerules proxy entity.");
if (!pGameRules || !g_szGameRulesProxy || !strcmp(g_szGameRulesProxy, "")) if (!pGameRules || !g_szGameRulesProxy[0])
return pContext->ThrowNativeError("Gamerules lookup failed."); return pContext->ThrowNativeError("Gamerules lookup failed.");
pContext->LocalToString(params[1], &prop); pContext->LocalToString(params[1], &prop);

View File

@ -39,7 +39,7 @@ struct TeamInfo
CBaseEntity *pEnt; CBaseEntity *pEnt;
}; };
const char *m_iScore; char m_iScore[64] = { 0 };
SourceHook::CVector<TeamInfo> g_Teams; SourceHook::CVector<TeamInfo> g_Teams;
@ -137,13 +137,15 @@ static cell_t GetTeamScore(IPluginContext *pContext, const cell_t *params)
return pContext->ThrowNativeError("Team index %d is invalid", teamindex); return pContext->ThrowNativeError("Team index %d is invalid", teamindex);
} }
if (!m_iScore) if (!m_iScore[0])
{ {
m_iScore = g_pGameConf->GetKeyValue("m_iScore"); auto key = g_pGameConf->GetKeyValue("m_iScore");
if (!m_iScore) if (!key || !key[0])
{ {
return pContext->ThrowNativeError("Failed to get m_iScore key"); return pContext->ThrowNativeError("Failed to get m_iScore key");
} }
strncpy(m_iScore, key, sizeof(m_iScore));
m_iScore[sizeof(m_iScore) - 1] = '\0';
} }
static int offset = -1; static int offset = -1;
@ -175,13 +177,15 @@ static cell_t SetTeamScore(IPluginContext *pContext, const cell_t *params)
return pContext->ThrowNativeError("Team index %d is invalid", teamindex); return pContext->ThrowNativeError("Team index %d is invalid", teamindex);
} }
if (m_iScore == NULL) if (!m_iScore[0])
{ {
m_iScore = g_pGameConf->GetKeyValue("m_iScore"); auto key = g_pGameConf->GetKeyValue("m_iScore");
if (m_iScore == NULL) if (!key || !key[0])
{ {
return pContext->ThrowNativeError("Failed to get m_iScore key"); return pContext->ThrowNativeError("Failed to get m_iScore key");
} }
strncpy(m_iScore, key, sizeof(m_iScore));
m_iScore[sizeof(m_iScore) - 1] = '\0';
} }
static int offset = -1; static int offset = -1;

View File

@ -34,6 +34,7 @@
#include <datamap.h> #include <datamap.h>
variant_t g_Variant_t; variant_t g_Variant_t;
char g_Variant_str_Value[128];
// copy this definition as the original file includes cbase.h which explodes in a shower of compile errors // copy this definition as the original file includes cbase.h which explodes in a shower of compile errors
void variant_t::SetEntity( CBaseEntity *val ) void variant_t::SetEntity( CBaseEntity *val )
@ -59,7 +60,9 @@ static cell_t SetVariantString(IPluginContext *pContext, const cell_t *params)
{ {
char *str; char *str;
pContext->LocalToString(params[1], &str); pContext->LocalToString(params[1], &str);
g_Variant_t.SetString(MAKE_STRING(str)); strncpy(g_Variant_str_Value, str, sizeof(g_Variant_str_Value));
g_Variant_str_Value[sizeof(g_Variant_str_Value) - 1] = '\0';
g_Variant_t.SetString(MAKE_STRING(g_Variant_str_Value));
return 1; return 1;
} }