From 3553ee0b4e2e973a742c5c73f43d848496959723 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Mon, 25 Apr 2022 11:39:10 +0200 Subject: [PATCH] janssonrpcc: free resources in case of errors --- src/modules/janssonrpcc/janssonrpc_io.c | 1 + src/modules/janssonrpcc/janssonrpc_request.c | 2 +- src/modules/janssonrpcc/janssonrpc_server.c | 2 +- src/modules/janssonrpcc/janssonrpc_srv.c | 16 ++++++++++++---- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/modules/janssonrpcc/janssonrpc_io.c b/src/modules/janssonrpcc/janssonrpc_io.c index 5e9d01d004d..830c2b96119 100644 --- a/src/modules/janssonrpcc/janssonrpc_io.c +++ b/src/modules/janssonrpcc/janssonrpc_io.c @@ -442,6 +442,7 @@ int jsonrpc_send(str conn, jsonrpc_request_t* req, bool notify_only) if (sent) { if (notify_only == true) { // free the request if using janssonrpc_notification function free_req_cmd(req->cmd); + req->cmd = NULL; free_request(req); } else { struct timeval tv; diff --git a/src/modules/janssonrpcc/janssonrpc_request.c b/src/modules/janssonrpcc/janssonrpc_request.c index ecd43c14764..758c56b61df 100644 --- a/src/modules/janssonrpcc/janssonrpc_request.c +++ b/src/modules/janssonrpcc/janssonrpc_request.c @@ -217,7 +217,7 @@ void retry_cb(int fd, short event, void* arg) DEBUG("retrying request: id=%d\n", req->id); - if(jsonrpc_send(req->cmd->conn, req, 0)<0) { + if(jsonrpc_send(req->cmd->conn, req, false)<0) { goto error; } diff --git a/src/modules/janssonrpcc/janssonrpc_server.c b/src/modules/janssonrpcc/janssonrpc_server.c index 6c4b999b502..16365fe214d 100644 --- a/src/modules/janssonrpcc/janssonrpc_server.c +++ b/src/modules/janssonrpcc/janssonrpc_server.c @@ -278,7 +278,7 @@ int jsonrpc_server_from_srv(str conn, str srv, DBG("server %s\n", srv_record->name); server = create_server(); - CHECK_MALLOC(server); + CHECK_MALLOC_GOTO(server, error); shm_str_dup(&server->conn, &conn); CHECK_MALLOC_GOTO(server->conn.s, error); diff --git a/src/modules/janssonrpcc/janssonrpc_srv.c b/src/modules/janssonrpcc/janssonrpc_srv.c index 3ce7e28676e..e29767ffa71 100644 --- a/src/modules/janssonrpcc/janssonrpc_srv.c +++ b/src/modules/janssonrpcc/janssonrpc_srv.c @@ -89,6 +89,7 @@ int refresh_srv(jsonrpc_srv_t* srv_obj) continue; srv_record = (struct srv_rdata*)l->rdata; if (srv_record == NULL) { + free_rdata_list(head); ERR("BUG: null rdata\n"); return -1; } @@ -109,16 +110,16 @@ int refresh_srv(jsonrpc_srv_t* srv_obj) jsonrpc_server_group_t* cgroup = NULL; for(cgroup=conn_group; cgroup!=NULL; cgroup=cgroup->next) { new_server = create_server(); - CHECK_MALLOC(new_server); + CHECK_MALLOC_GOTO(new_server, errdup); shm_str_dup(&new_server->conn, &cgroup->conn); - CHECK_MALLOC(new_server->conn.s); + CHECK_MALLOC_GOTO(new_server->conn.s, errdup); shm_str_dup(&new_server->addr, &name); - CHECK_MALLOC(new_server->addr.s); + CHECK_MALLOC_GOTO(new_server->addr.s, errdup); shm_str_dup(&new_server->srv, &srv); - CHECK_MALLOC(new_server->srv.s); + CHECK_MALLOC_GOTO(new_server->srv.s, errdup); new_server->port = srv_record->port; new_server->priority = srv_record->priority; @@ -129,6 +130,7 @@ int refresh_srv(jsonrpc_srv_t* srv_obj) addto_server_list(new_server, &new_servers); } } + free_rdata_list(head); if(iter <= 0) goto end; @@ -204,6 +206,12 @@ int refresh_srv(jsonrpc_srv_t* srv_obj) free_server_list(rm_servers); return retval; + +errdup: + free_rdata_list(head); + free_server_list(new_servers); + free_server(new_server); + return -1; } void free_srv(jsonrpc_srv_t* srv)