Fixed various memory issues. (bug 5766, r=asherkin)
authorKyle Sanderson <kyle.leet@gmail.com>
Mon Aug 12 00:44:22 2013 +0100 (2013-08-12)
changeset 3995e94dfd569130
parent 3994 4bc73bac0f4c
child 3996 4a0daf289347
Fixed various memory issues. (bug 5766, r=asherkin)
core/ConVarManager.cpp
core/ForwardSys.cpp
core/logic/PluginSys.cpp
extensions/updater/md5.cpp
sourcepawn/jit/md5/md5.cpp
tools/gamedata_md5/md5.cpp
     1.1 --- a/core/ConVarManager.cpp	Mon Aug 12 00:42:56 2013 +0100
     1.2 +++ b/core/ConVarManager.cpp	Mon Aug 12 00:44:22 2013 +0100
     1.3 @@ -304,14 +304,19 @@
     1.4  		delete pConVarList;
     1.5  	}
     1.6  
     1.7 +	const IPluginRuntime * pRuntime = plugin->GetRuntime();
     1.8 +
     1.9  	/* Remove convar queries for this plugin that haven't returned results yet */
    1.10 -	for (iter = m_ConVarQueries.begin(); iter != m_ConVarQueries.end(); iter++)
    1.11 +	for (iter = m_ConVarQueries.begin(); iter != m_ConVarQueries.end();)
    1.12  	{
    1.13  		ConVarQuery &query = (*iter);
    1.14 -		if (query.pCallback->GetParentRuntime() == plugin->GetRuntime())
    1.15 +		if (query.pCallback->GetParentRuntime() == pRuntime)
    1.16  		{
    1.17 -			m_ConVarQueries.erase(iter);
    1.18 +			iter = m_ConVarQueries.erase(iter);
    1.19 +			continue;
    1.20  		}
    1.21 +
    1.22 +		++iter;
    1.23  	}
    1.24  }
    1.25  
     2.1 --- a/core/ForwardSys.cpp	Mon Aug 12 00:42:56 2013 +0100
     2.2 +++ b/core/ForwardSys.cpp	Mon Aug 12 00:44:22 2013 +0100
     2.3 @@ -681,7 +681,7 @@
     2.4  		lst = &m_paused;
     2.5  	}
     2.6  
     2.7 -	for (iter=m_functions.begin(); iter!=m_functions.end(); iter++)
     2.8 +	for (iter=lst->begin(); iter!=lst->end(); iter++)
     2.9  	{
    2.10  		if ((*iter) == func)
    2.11  		{
     3.1 --- a/core/logic/PluginSys.cpp	Mon Aug 12 00:42:56 2013 +0100
     3.2 +++ b/core/logic/PluginSys.cpp	Mon Aug 12 00:44:22 2013 +0100
     3.3 @@ -2605,10 +2605,12 @@
     3.4  		smcore.Format(pluginfile, sizeof(pluginfile), "%s%s", arg, ext);
     3.5  
     3.6  		CPlugin **pluginpp = m_LoadLookup.retrieve(pluginfile);
     3.7 -		if (!pluginpp || !*pluginpp)
     3.8 +		if (!pluginpp)
     3.9  		{
    3.10  			return NULL;
    3.11  		}
    3.12 +		
    3.13 +		pl = *pluginpp;
    3.14  	}
    3.15  
    3.16  	return pl;
     4.1 --- a/extensions/updater/md5.cpp	Mon Aug 12 00:42:56 2013 +0100
     4.2 +++ b/extensions/updater/md5.cpp	Mon Aug 12 00:44:22 2013 +0100
     4.3 @@ -171,14 +171,13 @@
     4.4  
     4.5  unsigned char *MD5::raw_digest(){
     4.6  
     4.7 -  uint1 *s = new uint1[16];
     4.8 -
     4.9    if (!finalized){
    4.10  /*    cerr << "MD5::raw_digest:  Can't get digest if you haven't "<<
    4.11        "finalized the digest!" <<endl;*/
    4.12      return ( (unsigned char*) "");
    4.13    }
    4.14  
    4.15 +  uint1 *s = new uint1[16];
    4.16    memcpy(s, digest, 16);
    4.17    return s;
    4.18  }
     5.1 --- a/sourcepawn/jit/md5/md5.cpp	Mon Aug 12 00:42:56 2013 +0100
     5.2 +++ b/sourcepawn/jit/md5/md5.cpp	Mon Aug 12 00:44:22 2013 +0100
     5.3 @@ -171,14 +171,13 @@
     5.4  
     5.5  unsigned char *MD5::raw_digest(){
     5.6  
     5.7 -  uint1 *s = new uint1[16];
     5.8 -
     5.9    if (!finalized){
    5.10  /*    cerr << "MD5::raw_digest:  Can't get digest if you haven't "<<
    5.11        "finalized the digest!" <<endl;*/
    5.12      return ( (unsigned char*) "");
    5.13    }
    5.14  
    5.15 +  uint1 *s = new uint1[16];
    5.16    memcpy(s, digest, 16);
    5.17    return s;
    5.18  }
     6.1 --- a/tools/gamedata_md5/md5.cpp	Mon Aug 12 00:42:56 2013 +0100
     6.2 +++ b/tools/gamedata_md5/md5.cpp	Mon Aug 12 00:44:22 2013 +0100
     6.3 @@ -171,14 +171,13 @@
     6.4  
     6.5  unsigned char *MD5::raw_digest(){
     6.6  
     6.7 -  uint1 *s = new uint1[16];
     6.8 -
     6.9    if (!finalized){
    6.10  /*    cerr << "MD5::raw_digest:  Can't get digest if you haven't "<<
    6.11        "finalized the digest!" <<endl;*/
    6.12      return ( (unsigned char*) "");
    6.13    }
    6.14  
    6.15 +  uint1 *s = new uint1[16];
    6.16    memcpy(s, digest, 16);
    6.17    return s;
    6.18  }
    6.19 @@ -198,15 +197,15 @@
    6.20  
    6.21  char *MD5::hex_digest(){
    6.22  
    6.23 -  int i;
    6.24 -  char *s= new char[33];
    6.25 -
    6.26    if (!finalized){
    6.27  /*    cerr << "MD5::hex_digest:  Can't get digest if you haven't "<<
    6.28        "finalized the digest!" <<endl;*/
    6.29      return "";
    6.30    }
    6.31  
    6.32 +  int i;
    6.33 +  char *s= new char[33];
    6.34 +
    6.35    for (i=0; i<16; i++)
    6.36      sprintf(s+i*2, "%02x", digest[i]);
    6.37