From 36c6a613301c1063972b6457eb26ffc54b8eb789 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Wed, 5 Nov 2014 14:18:38 +0200 Subject: [PATCH] Fixes to coverity bugs: 72670: query_classifier/query_classifier.cc 72682: server/modules/filter/qlafilter.c 72679: server/modules/filter/tee.c 72716: server/modules/protocol/maxscaled.c 72694: server/modules/protocol/telnetd.c 71743: server/modules/routing/readwritesplit/readwritesplit.c --- query_classifier/query_classifier.cc | 11 ++++++----- server/modules/filter/qlafilter.c | 17 ++++++++++++----- server/modules/filter/tee.c | 2 +- server/modules/protocol/maxscaled.c | 1 + server/modules/protocol/telnetd.c | 1 + .../routing/readwritesplit/readwritesplit.c | 15 +++++++++++---- 6 files changed, 32 insertions(+), 15 deletions(-) diff --git a/query_classifier/query_classifier.cc b/query_classifier/query_classifier.cc index 1f5970e35..dec627b38 100644 --- a/query_classifier/query_classifier.cc +++ b/query_classifier/query_classifier.cc @@ -1049,15 +1049,16 @@ char** skygw_get_table_names(GWBUF* querybuf,int* tblsize, bool fullnames) TABLE_LIST* tbl; int i = 0, currtblsz = 0; - char **tables, - **tmp; + char **tables = NULL, + **tmp = NULL; - if((lex = get_lex(querybuf)) == NULL) - { + if( (lex = get_lex(querybuf)) == NULL || + lex->current_select == NULL ) + { goto retblock; } - lex->current_select = lex->all_selects_list; + lex->current_select = lex->all_selects_list; while(lex->current_select){ diff --git a/server/modules/filter/qlafilter.c b/server/modules/filter/qlafilter.c index 39cac0470..32683f279 100644 --- a/server/modules/filter/qlafilter.c +++ b/server/modules/filter/qlafilter.c @@ -170,10 +170,11 @@ int i; if ((my_instance = calloc(1, sizeof(QLA_INSTANCE))) != NULL) { - if (options) + if (options){ my_instance->filebase = strdup(options[0]); - else + }else{ my_instance->filebase = strdup("qla"); + } my_instance->source = NULL; my_instance->userName = NULL; my_instance->match = NULL; @@ -196,8 +197,10 @@ int i; my_instance->userName = strdup(params[i]->value); else if (!strcmp(params[i]->name, "filebase")) { - if (my_instance->filebase) + if (my_instance->filebase){ free(my_instance->filebase); + my_instance->filebase = NULL; + } my_instance->source = strdup(params[i]->value); } else if (!filter_standard_parameter(params[i]->name)) @@ -219,7 +222,9 @@ int i; my_instance->match))); free(my_instance->match); free(my_instance->source); - free(my_instance->filebase); + if(my_instance->filebase){ + free(my_instance->filebase); + } free(my_instance); return NULL; } @@ -235,7 +240,9 @@ int i; regfree(&my_instance->re); free(my_instance->match); free(my_instance->source); - free(my_instance->filebase); + if(my_instance->filebase){ + free(my_instance->filebase); + } free(my_instance); return NULL; } diff --git a/server/modules/filter/tee.c b/server/modules/filter/tee.c index e87e95f95..60be14413 100644 --- a/server/modules/filter/tee.c +++ b/server/modules/filter/tee.c @@ -391,7 +391,7 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue) TEE_INSTANCE *my_instance = (TEE_INSTANCE *)instance; TEE_SESSION *my_session = (TEE_SESSION *)session; char *ptr; -int length, rval, residual; +int length, rval, residual = 0; GWBUF *clone = NULL; if (my_session->residual) diff --git a/server/modules/protocol/maxscaled.c b/server/modules/protocol/maxscaled.c index ebd67636d..5623fcad6 100644 --- a/server/modules/protocol/maxscaled.c +++ b/server/modules/protocol/maxscaled.c @@ -270,6 +270,7 @@ int n_connect = 0; if (client_dcb == NULL) { + close(so); return n_connect; } client_dcb->fd = so; diff --git a/server/modules/protocol/telnetd.c b/server/modules/protocol/telnetd.c index d89962cd8..8250c9caf 100644 --- a/server/modules/protocol/telnetd.c +++ b/server/modules/protocol/telnetd.c @@ -298,6 +298,7 @@ int n_connect = 0; if (client_dcb == NULL) { + close(so); return n_connect; } client_dcb->fd = so; diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index 85b4aa32a..8f68c60b7 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -1520,14 +1520,21 @@ skygw_query_type_t is_read_tmp_table( } free(hkey); - free(tbl[i]); } - free(tbl); } } - - return qtype; + + if(tsize > 0) + { + for(i = 0; i