From 96e971084a9c0de4bfaebec5f6208d0db0f1d2a3 Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Sat, 24 Aug 2013 21:59:52 -0400 Subject: [PATCH] Fix SDKHooks hook ent validation missing first datatable name (bug 5881, r=asherkin). --- extensions/sdkhooks/extension.cpp | 3 +-- extensions/sdkhooks/natives.cpp | 4 ++-- extensions/sdkhooks/util.cpp | 18 ++++++------------ extensions/sdkhooks/util.h | 2 +- 4 files changed, 10 insertions(+), 17 deletions(-) diff --git a/extensions/sdkhooks/extension.cpp b/extensions/sdkhooks/extension.cpp index 7ae00ef2..0cf257cb 100644 --- a/extensions/sdkhooks/extension.cpp +++ b/extensions/sdkhooks/extension.cpp @@ -525,11 +525,10 @@ HookReturn SDKHooks::Hook(int entity, SDKHookType type, IPluginFunction *callbac if (!!strcmp(g_HookTypes[type].dtReq, "")) { - sm_sendprop_info_t spi; IServerUnknown *pUnk = (IServerUnknown *)pEnt; IServerNetworkable *pNet = pUnk->GetNetworkable(); - if (pNet && !UTIL_FindDataTable(pNet->GetServerClass()->m_pTable, g_HookTypes[type].dtReq, &spi, 0)) + if (pNet && !UTIL_ContainsDataTable(pNet->GetServerClass()->m_pTable, g_HookTypes[type].dtReq)) return HookRet_BadEntForHookType; } diff --git a/extensions/sdkhooks/natives.cpp b/extensions/sdkhooks/natives.cpp index 22c171e8..dde5bfcb 100644 --- a/extensions/sdkhooks/natives.cpp +++ b/extensions/sdkhooks/natives.cpp @@ -190,13 +190,13 @@ cell_t Native_DropWeapon(IPluginContext *pContext, const cell_t *params) if (!pWeapon) return pContext->ThrowNativeError("Invalid entity index %d for weapon", params[2]); - sm_sendprop_info_t spi; IServerUnknown *pUnk = (IServerUnknown *)pWeapon; IServerNetworkable *pNet = pUnk->GetNetworkable(); - if (!UTIL_FindDataTable(pNet->GetServerClass()->m_pTable, "DT_BaseCombatWeapon", &spi, 0)) + if (!UTIL_ContainsDataTable(pNet->GetServerClass()->m_pTable, "DT_BaseCombatWeapon")) return pContext->ThrowNativeError("Entity index %d is not a weapon", params[2]); + sm_sendprop_info_t spi; if (!gamehelpers->FindSendPropInfo("CBaseCombatWeapon", "m_hOwnerEntity", &spi)) return pContext->ThrowNativeError("Invalid entity index %d for weapon", params[2]); diff --git a/extensions/sdkhooks/util.cpp b/extensions/sdkhooks/util.cpp index 23742238..8370943d 100644 --- a/extensions/sdkhooks/util.cpp +++ b/extensions/sdkhooks/util.cpp @@ -64,16 +64,16 @@ CBaseEntity *UTIL_GetCBaseEntity(int num, bool onlyPlayers) return pUnk->GetBaseEntity(); } -bool UTIL_FindDataTable(SendTable *pTable, - const char *name, - sm_sendprop_info_t *info, - unsigned int offset) +bool UTIL_ContainsDataTable(SendTable *pTable, const char *name) { - const char *pname; + const char *pname = pTable->GetName(); int props = pTable->GetNumProps(); SendProp *prop; SendTable *table; + if (pname && strcmp(name, pname) == 0) + return true; + for (int i=0; iGetProp(i); @@ -83,16 +83,10 @@ bool UTIL_FindDataTable(SendTable *pTable, pname = table->GetName(); if (pname && strcmp(name, pname) == 0) { - info->prop = prop; - info->actual_offset = offset + info->prop->GetOffset(); return true; } - if (UTIL_FindDataTable(table, - name, - info, - offset + prop->GetOffset()) - ) + if (UTIL_ContainsDataTable(table, name)) { return true; } diff --git a/extensions/sdkhooks/util.h b/extensions/sdkhooks/util.h index fca83757..3a4b46f5 100644 --- a/extensions/sdkhooks/util.h +++ b/extensions/sdkhooks/util.h @@ -35,6 +35,6 @@ #include CBaseEntity *UTIL_GetCBaseEntity(int num, bool onlyPlayers=false); -bool UTIL_FindDataTable(SendTable *pTable, const char *name, sm_sendprop_info_t *info, unsigned int offset); +bool UTIL_ContainsDataTable(SendTable *pTable, const char *name); #endif //_INCLUDE_TF2TOOLS_UTIL_H_