Fixes to Coverity defects

Few fixes to possible use of freed memory and resource leaks.
This commit is contained in:
Markus Makela
2015-12-15 11:19:09 +02:00
parent 3d20beef8c
commit 78b5777d6e
9 changed files with 42 additions and 20 deletions

View File

@ -2528,6 +2528,7 @@ config_get_ifaddr(unsigned char *output)
{
memcpy(output, ifr.ifr_hwaddr.sa_data, 6);
}
close(sock);
return success;
}

View File

@ -2343,29 +2343,30 @@ static void *
dbusers_keyread(int fd)
{
MYSQL_USER_HOST *dbkey;
int tmp;
if ((dbkey = (MYSQL_USER_HOST *) malloc(sizeof(MYSQL_USER_HOST))) == NULL)
{
return NULL;
}
if (read(fd, &tmp, sizeof(tmp)) != sizeof(tmp))
int user_size;
if (read(fd, &user_size, sizeof(user_size)) != sizeof(user_size))
{
free(dbkey);
return NULL;
}
if ((dbkey->user = (char *) malloc(tmp + 1)) == NULL)
if ((dbkey->user = (char *) malloc(user_size + 1)) == NULL)
{
free(dbkey);
return NULL;
}
if (read(fd, dbkey->user, tmp) != tmp)
if (read(fd, dbkey->user, user_size) != user_size)
{
free(dbkey->user);
free(dbkey);
return NULL;
}
dbkey->user[tmp] = 0; // NULL Terminate
dbkey->user[user_size] = 0; // NULL Terminate
if (read(fd, &dbkey->ipv4, sizeof(dbkey->ipv4)) != sizeof(dbkey->ipv4))
{
free(dbkey->user);
@ -2378,28 +2379,30 @@ dbusers_keyread(int fd)
free(dbkey);
return NULL;
}
if (read(fd, &tmp, sizeof(tmp)) != sizeof(tmp))
int res_size;
if (read(fd, &res_size, sizeof(res_size)) != sizeof(res_size))
{
free(dbkey->user);
free(dbkey);
return NULL;
}
if (tmp != -1)
else if (res_size != -1)
{
if ((dbkey->resource = (char *) malloc(tmp + 1)) == NULL)
if ((dbkey->resource = (char *) malloc(res_size + 1)) == NULL)
{
free(dbkey->user);
free(dbkey);
return NULL;
}
if (read(fd, dbkey->resource, tmp) != tmp)
if (read(fd, dbkey->resource, res_size) != res_size)
{
free(dbkey->resource);
free(dbkey->user);
free(dbkey);
return NULL;
}
dbkey->resource[tmp] = 0; // NULL Terminate
dbkey->resource[res_size] = 0; // NULL Terminate
}
else // NULL is valid, so represent with a length of -1
{

View File

@ -643,6 +643,9 @@ dcb_process_victim_queue(DCB *listofdcb)
}
else
{
#if defined(FAKE_CODE)
conn_open[dcb->fd] = false;
#endif /* FAKE_CODE */
dcb->fd = DCBFD_CLOSED;
MXS_DEBUG("%lu [dcb_process_victim_queue] Closed socket "
@ -650,9 +653,6 @@ dcb_process_victim_queue(DCB *listofdcb)
pthread_self(),
dcb->fd,
dcb);
#if defined(FAKE_CODE)
conn_open[dcb->fd] = false;
#endif /* FAKE_CODE */
}
}

View File

@ -1024,7 +1024,7 @@ int main(int argc, char **argv)
int n_services;
int eno = 0; /*< local variable for errno */
int opt;
int daemon_pipe[2];
int daemon_pipe[2] = {-1, -1};
bool parent_process;
int child_status;
void** threads = NULL; /*< thread list */

View File

@ -502,7 +502,7 @@ createInstance(char **options, FILTER_PARAMETER **params)
MQ_INSTANCE *my_instance;
int paramcount = 0, parammax = 64, i = 0, x = 0, arrsize = 0;
FILTER_PARAMETER** paramlist;
char** arr;
char** arr = NULL;
char taskname[512];
if ((my_instance = calloc(1, sizeof(MQ_INSTANCE))))
@ -514,6 +514,8 @@ createInstance(char **options, FILTER_PARAMETER **params)
if ((my_instance->conn = amqp_new_connection()) == NULL)
{
free(paramlist);
free(my_instance);
return NULL;
}
my_instance->channel = 1;
@ -610,6 +612,10 @@ createInstance(char **options, FILTER_PARAMETER **params)
if (arrsize > 0)
{
for (int x = 0; x < arrsize; x++)
{
free(arr[x]);
}
free(arr);
}
arrsize = 0;
@ -777,7 +783,11 @@ createInstance(char **options, FILTER_PARAMETER **params)
snprintf(taskname, 511, "mqtask%d", atomic_add(&hktask_id, 1));
hktask_add(taskname, sendMessage, (void*) my_instance, 5);
for (int x = 0; x < arrsize; x++)
{
free(arr[x]);
}
free(arr);
}
return(FILTER *) my_instance;
}
@ -834,7 +844,7 @@ void sendMessage(void* data)
{
MQ_INSTANCE *instance = (MQ_INSTANCE*) data;
mqmessage *tmp;
int err_num;
int err_num = AMQP_STATUS_OK;
spinlock_acquire(&instance->rconn_lock);
if (instance->conn_stat != AMQP_STATUS_OK)

View File

@ -360,6 +360,10 @@ int n_connect = 0;
}
n_connect++;
}
else
{
close(so);
}
}
}

View File

@ -156,6 +156,7 @@ MAXINFO_TREE *col, *table;
{
/** Unknown token after RESTART MONITOR|SERVICE */
*parse_error = PARSE_SYNTAX_ERROR;
free(text);
free_tree(tree);
return NULL;
}
@ -376,7 +377,10 @@ int i;
}
if (s1 == s2)
{
*text = NULL;
return NULL;
}
*text = strndup(s1, s2 - s1);
for (i = 0; keywords[i].text; i++)

View File

@ -1254,7 +1254,7 @@ static void* newSession(
if(db[0] != 0x0)
{
/* Store the database the client is connecting to */
strncpy(client_rses->connect_db,db,MYSQL_DATABASE_MAXLEN+1);
snprintf(client_rses->connect_db, MYSQL_DATABASE_MAXLEN + 1, "%s", db);
}
@ -3797,7 +3797,7 @@ static bool route_session_write(
unsigned char packet_type,
skygw_query_type_t qtype)
{
bool succp;
bool succp = false;
rses_property_t* prop;
backend_ref_t* backend_ref;
int i;

View File

@ -1497,7 +1497,7 @@ gen_show_dbs_response(ROUTER_INSTANCE* router, ROUTER_CLIENT_SES* client)
rval = gwbuf_append(rval, last_packet);
rval = gwbuf_make_contiguous(rval);
hashtable_iterator_free(iter);
return rval;
}