From c8e5df94beeb000d32220db3f2186d2848024ad3 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Sun, 3 May 2015 09:58:17 +0300 Subject: [PATCH] Fixed memory leak in query_classifier. --- query_classifier/query_classifier.cc | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/query_classifier/query_classifier.cc b/query_classifier/query_classifier.cc index 98186b190..bb6b1c6da 100644 --- a/query_classifier/query_classifier.cc +++ b/query_classifier/query_classifier.cc @@ -1204,15 +1204,15 @@ inline void add_str(char** buf, int* buflen, int* bufsize, char* str) int isize = strlen(str) + 1; if(*buf == NULL || isize + *buflen >= *bufsize) { - char *tmp = (char*)calloc((*bufsize) * 2 + isize, sizeof(char)); - if(tmp){ - memcpy(tmp,*buf,*bufsize); - if(*buf){ - free(*buf); - } - *buf = tmp; - *bufsize = (*bufsize) * 2 + isize; + *bufsize = (*bufsize) * 2 + isize; + char *tmp = (char*)realloc(*buf,(*bufsize)* sizeof(char)); + if(tmp == NULL){ + skygw_log_write_flush (LE,"Error: memory reallocation failed"); + free(*buf); + *buf = NULL; + *bufsize = 0; } + *buf = tmp; } if(*buflen > 0){ @@ -1248,7 +1248,12 @@ char* skygw_get_affected_fields(GWBUF* buf) } lex->current_select = lex->all_selects_list; - + if((where = (char*)malloc(sizeof(char)*1)) == NULL) + { + skygw_log_write_flush(LE,"Error: Memory allocation failed."); + return NULL; + } + *where = '\0'; while(lex->current_select) {