Skip to content

Commit 83a1d2b

Browse files
satoon101Ayuto
authored andcommitted
Fixed commands not registering properly when given strings are not persistent (#240)
* Fixed names starting with / and ! (and probably others, as well) not being registered properly. * Reverted previous fix. Added proposed fix by storing the strdup in the object itself and freeing it upon deletion. This fixes a memory leak in the original fix. * Added the object->m_Name to the insert call instead of using the given szName instance. * Fixed compiler error on free().
1 parent 0a8b801 commit 83a1d2b

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

src/core/modules/commands/commands_client.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ CClientCommandManager* GetClientCommand(const char* szName)
6868
if (!find_manager<ClientCommandMap, ClientCommandMap::iterator>(g_ClientCommandMap, szName, iter))
6969
{
7070
manager = new CClientCommandManager(szName);
71-
g_ClientCommandMap.insert(std::make_pair(szName, manager));
71+
g_ClientCommandMap.insert(std::make_pair(manager->m_Name, manager));
7272
}
7373
else
7474
{
@@ -153,14 +153,15 @@ PLUGIN_RESULT DispatchClientCommand(edict_t* pEntity, const CCommand &command)
153153
//-----------------------------------------------------------------------------
154154
CClientCommandManager::CClientCommandManager(const char* szName)
155155
{
156-
m_Name = szName;
156+
m_Name = strdup(szName);
157157
}
158158

159159
//-----------------------------------------------------------------------------
160160
// CClientCommandManager destructor.
161161
//-----------------------------------------------------------------------------
162162
CClientCommandManager::~CClientCommandManager()
163163
{
164+
free((char*)m_Name);
164165
}
165166

166167
//-----------------------------------------------------------------------------

src/core/modules/commands/commands_say.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ CSayCommandManager* GetSayCommand(const char* szName)
102102
if (!find_manager<SayCommandMap, SayCommandMap::iterator>(g_SayCommandMap, szName, iter))
103103
{
104104
manager = new CSayCommandManager(szName);
105-
g_SayCommandMap.insert(std::make_pair(szName, manager));
105+
g_SayCommandMap.insert(std::make_pair(manager->m_Name, manager));
106106
}
107107
else
108108
{
@@ -288,14 +288,15 @@ void SayConCommand::Dispatch( const CCommand& command )
288288
//-----------------------------------------------------------------------------
289289
CSayCommandManager::CSayCommandManager(const char* szName)
290290
{
291-
m_Name = szName;
291+
m_Name = strdup(szName);
292292
}
293293

294294
//-----------------------------------------------------------------------------
295295
// CSayCommandManager destructor.
296296
//-----------------------------------------------------------------------------
297297
CSayCommandManager::~CSayCommandManager()
298298
{
299+
free((char*)m_Name);
299300
}
300301

301302
//-----------------------------------------------------------------------------

src/core/modules/commands/commands_server.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ CServerCommandManager* GetServerCommand(const char* szName,
8787
if (!find_manager<ServerCommandMap, ServerCommandMap::iterator>(g_ServerCommandMap, szName, iter))
8888
{
8989
manager = CServerCommandManager::CreateCommand(szName, szHelpText, iFlags);
90-
g_ServerCommandMap.insert(std::make_pair(szName, manager));
90+
g_ServerCommandMap.insert(std::make_pair(manager->m_Name, manager));
9191
}
9292
else
9393
{
@@ -148,7 +148,7 @@ CServerCommandManager::CServerCommandManager(ConCommand* pConCommand,
148148
ConCommand(szName, (FnCommandCallback_t)NULL, szHelpText, iFlags),
149149
m_pOldCommand(pConCommand)
150150
{
151-
m_Name = szName;
151+
m_Name = strdup(szName);
152152
}
153153

154154
//-----------------------------------------------------------------------------
@@ -168,6 +168,8 @@ CServerCommandManager::~CServerCommandManager()
168168
// Re-register the old command instance
169169
g_pCVar->RegisterConCommand(m_pOldCommand);
170170
}
171+
172+
free((char*)m_Name);
171173
}
172174

173175
//-----------------------------------------------------------------------------

0 commit comments

Comments
 (0)