From c4d51f54cd59bb38d4357b7b7d8b9154ac5cec6a Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Thu, 6 Nov 2014 15:40:11 +0200 Subject: [PATCH 1/2] Fixes to Coverity bugs: 72743 73407 73408 73409 73415 73419 --- query_classifier/test/classify.c | 23 +++++++++++-------- server/core/test/testadminusers.c | 2 +- server/core/test/testhash.c | 1 + server/core/test/testhint.c | 4 +++- server/core/test/testserver.c | 4 ++-- server/modules/filter/test/harness_common.c | 4 ++++ .../routing/readwritesplit/readwritesplit.c | 12 ++++------ 7 files changed, 29 insertions(+), 21 deletions(-) diff --git a/query_classifier/test/classify.c b/query_classifier/test/classify.c index 0555844c9..5ceadea9c 100644 --- a/query_classifier/test/classify.c +++ b/query_classifier/test/classify.c @@ -34,7 +34,7 @@ int main(int argc, char** argv) return 1; } int rd = 0,buffsz = getpagesize(),strsz = 0,ex_val = 0; - char buffer[buffsz], *strbuff = (char*)calloc(buffsz,sizeof(char)); + char buffer[1024], *strbuff = (char*)calloc(buffsz,sizeof(char)); FILE *input,*expected; if(mysql_library_init(num_elements, server_options, server_groups)) @@ -45,25 +45,30 @@ int main(int argc, char** argv) input = fopen(argv[1],"rb"); expected = fopen(argv[2],"rb"); - memset(buffer,0,buffsz); - while((rd = fread(buffer,sizeof(char),buffsz - 1,input))){ + + while((rd = fread(buffer,sizeof(char),1023,input))){ /**Fill the read buffer*/ + if(strsz + rd >= buffsz){ - char* tmp = (char*)calloc((buffsz*2),sizeof(char)); + + char* tmp = realloc(strbuff,(buffsz*2)*sizeof(char)); - if(!tmp){ - fprintf(stderr,"Error: Cannot allocate enough memory."); + if(tmp == NULL){ + free(strbuff); + fclose(input); + fclose(expected); + mysql_library_end(); + fprintf(stderr,"Error: Memory allocation failed."); return 1; } - memcpy(tmp,strbuff,buffsz); - free(strbuff); strbuff = tmp; buffsz *= 2; } memcpy(strbuff+strsz,buffer,rd); strsz += rd; + *(strbuff+strsz) = '\0'; char *tok,*nlptr; @@ -167,10 +172,10 @@ int main(int argc, char** argv) gwbuf_free(buff); } - memset(buffer,0,buffsz); } fclose(input); fclose(expected); + mysql_library_end(); free(strbuff); return ex_val; } diff --git a/server/core/test/testadminusers.c b/server/core/test/testadminusers.c index eb2ee8e40..ec2917783 100644 --- a/server/core/test/testadminusers.c +++ b/server/core/test/testadminusers.c @@ -269,7 +269,7 @@ int result = 0; char *home, buf[1024]; /* Unlink any existing password file before running this test */ - if ((home = getenv("MAXSCALE_HOME")) == NULL) + if ((home = getenv("MAXSCALE_HOME")) == NULL || strlen(home) >= 1024) home = "/usr/local/skysql"; sprintf(buf, "%s/etc/passwd", home); if (strcmp(buf, "/etc/passwd") != 0) diff --git a/server/core/test/testhash.c b/server/core/test/testhash.c index 9fc2fb9cf..89720da80 100644 --- a/server/core/test/testhash.c +++ b/server/core/test/testhash.c @@ -158,6 +158,7 @@ static bool do_hashtest( hashtable_free(h); return_succp: + free(val_arr); return succp; } diff --git a/server/core/test/testhint.c b/server/core/test/testhint.c index 3ec5d9953..0f46e915b 100644 --- a/server/core/test/testhint.c +++ b/server/core/test/testhint.c @@ -46,7 +46,9 @@ HINT *hint; /* Hint tests */ ss_dfprintf(stderr, "testhint : Add a parameter hint to a null list"); - hint = hint_create_parameter(NULL, strdup("name"), "value"); + char* name = strdup("name"); + hint = hint_create_parameter(NULL, name, "value"); + free(name); ss_info_dassert(NULL != hint, "New hint list should not be null"); ss_info_dassert(0 == strcmp("value", hint->value), "Hint value should be correct"); ss_info_dassert(0 != hint_exists(&hint, HINT_PARAMETER), "Hint of parameter type should exist"); diff --git a/server/core/test/testserver.c b/server/core/test/testserver.c index b1065ace0..5d4d130a8 100644 --- a/server/core/test/testserver.c +++ b/server/core/test/testserver.c @@ -68,7 +68,8 @@ char *status; server_set_status(server, SERVER_MASTER); status = server_status(server); ss_info_dassert(0 == strcmp("Master, Running", status), "Should find correct status."); - server_clear_status(server, SERVER_MASTER); + server_clear_status(server, SERVER_MASTER); + free(status); status = server_status(server); ss_info_dassert(0 == strcmp("Running", status), "Status of Server should be Running after master status cleared."); if (NULL != status) free(status); @@ -78,7 +79,6 @@ char *status; ss_dfprintf(stderr, "\t..done\nFreeing Server."); ss_info_dassert(0 != server_free(server), "Free should succeed"); ss_dfprintf(stderr, "\t..done\n"); - return 0; } diff --git a/server/modules/filter/test/harness_common.c b/server/modules/filter/test/harness_common.c index a247bc54a..28dfb5f47 100644 --- a/server/modules/filter/test/harness_common.c +++ b/server/modules/filter/test/harness_common.c @@ -953,6 +953,7 @@ int process_opts(int argc, char** argv) instance.verbose = 1; if(argc < 2){ + close(fd); return 1; } char* conf_name = NULL; @@ -970,6 +971,9 @@ int process_opts(int argc, char** argv) break; case 'c': + if(conf_name){ + free(conf_name); + } conf_name = strdup(optarg); break; diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index 5e1d7a407..e7f003d04 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -1525,15 +1525,12 @@ skygw_query_type_t is_read_tmp_table( } } - if(tsize > 0) + for(i = 0; i Date: Thu, 6 Nov 2014 16:23:38 +0200 Subject: [PATCH 2/2] Fix to Coverity error 75425 --- server/modules/filter/test/harness_common.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/modules/filter/test/harness_common.c b/server/modules/filter/test/harness_common.c index 28dfb5f47..29ed2cf53 100644 --- a/server/modules/filter/test/harness_common.c +++ b/server/modules/filter/test/harness_common.c @@ -303,18 +303,19 @@ int load_query() int i, qcount = 0, qbuff_sz = 10, rval = 0; int offset = 0; unsigned int qlen = 0; - - if((buffer = malloc(4092*sizeof(char))) == NULL){ + buffer = (char*)malloc(4092*sizeof(char)); + if(buffer == NULL){ printf("Error: cannot allocate enough memory.\n"); skygw_log_write(LOGFILE_ERROR,"Error: cannot allocate enough memory.\n"); return 1; } - if((query_list = calloc(qbuff_sz,sizeof(char*))) == NULL){ + query_list = calloc(qbuff_sz,sizeof(char*)); + if(query_list == NULL){ printf("Error: cannot allocate enough memory.\n"); skygw_log_write(LOGFILE_ERROR,"Error: cannot allocate enough memory.\n"); - rval = 1; - goto retblock; + free(buffer); + return 1; }