From bf7576a501e81df9ce5cd2571ee29f0df7854d1e Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Tue, 28 Apr 2015 18:43:40 +0300 Subject: [PATCH] Fixed memory leak in config_load --- server/core/config.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/server/core/config.c b/server/core/config.c index 093e8bc35..390e3153c 100644 --- a/server/core/config.c +++ b/server/core/config.c @@ -209,20 +209,33 @@ int rval; conn = mysql_init(NULL); if (conn) { if (mysql_real_connect(conn, NULL, NULL, NULL, NULL, 0, NULL, 0)) { - char *ptr; - version_string = (char *)mysql_get_server_info(conn); + char *ptr,*tmp; + + tmp = (char *)mysql_get_server_info(conn); unsigned int server_version = mysql_get_server_version(conn); - ptr = strstr(version_string, "-embedded"); + + if(version_string) + free(version_string); + + if((version_string = malloc(strlen(tmp) + strlen("5.5.5-") + 1)) == NULL) + return 0; + + if (server_version >= 100000) + { + strcpy(version_string,"5.5.5-"); + strcat(version_string,tmp); + } + else + { + strcpy(version_string,tmp); + } + + ptr = strstr(tmp, "-embedded"); if (ptr) { *ptr = '\0'; } - if (server_version >= 100000) - { - char* tmpstr = malloc(strlen(version_string) + strlen("5.5.5-") + 1); - strcpy(tmpstr,"5.5.5-"); - strcat(tmpstr,version_string); - version_string = tmpstr; - } + + } mysql_close(conn); }