From 53029022bd67a3ddea2b86a21d4ce3f405d5ee9a Mon Sep 17 00:00:00 2001 From: "jihwan.seo" Date: Thu, 2 Jul 2015 18:56:36 +0900 Subject: [PATCH] fixed memory leak in CA As the uri is moved from Endpoint to CAInfo structure currently. but 'free()' was not updated at that time. so 'free()' is also need in here and there. Change-Id: I1b3429c29c769c5920dd427688e97b517dd94f66 Signed-off-by: jihwan.seo Reviewed-on: https://gerrit.iotivity.org/gerrit/1488 Tested-by: jenkins-iotivity Reviewed-by: John Light Reviewed-by: Erich Keane --- .../csdk/connectivity/common/src/caremotehandler.c | 40 ++++++++++++++++++++++ .../csdk/connectivity/samples/linux/sample_main.c | 5 +++ resource/csdk/connectivity/src/camessagehandler.c | 2 ++ 3 files changed, 47 insertions(+) diff --git a/resource/csdk/connectivity/common/src/caremotehandler.c b/resource/csdk/connectivity/common/src/caremotehandler.c index 29915d8..2886f5a 100644 --- a/resource/csdk/connectivity/common/src/caremotehandler.c +++ b/resource/csdk/connectivity/common/src/caremotehandler.c @@ -129,6 +129,23 @@ CARequestInfo_t *CACloneRequestInfo(const CARequestInfo_t *rep) clone->info.payload = temp; } + if (NULL != rep->info.resourceUri) + { + // allocate payload field + char *temp = OICStrdup(rep->info.resourceUri); + if (NULL == temp) + { + OIC_LOG(ERROR, TAG, "CACloneRequestInfo Out of memory"); + + CADestroyRequestInfoInternal(clone); + + return NULL; + } + + // save the resourceUri + clone->info.resourceUri = temp; + } + return clone; } @@ -236,6 +253,23 @@ CAResponseInfo_t *CACloneResponseInfo(const CAResponseInfo_t *rep) clone->info.payload = temp; } + if (NULL != rep->info.resourceUri) + { + // allocate payload field + char *temp = OICStrdup(rep->info.resourceUri); + if (NULL == temp) + { + OIC_LOG(ERROR, TAG, "CACloneResponseInfo Out of memory"); + + CADestroyResponseInfoInternal(clone); + + return NULL; + } + + // save the resourceUri + clone->info.resourceUri = temp; + } + return clone; } @@ -285,6 +319,9 @@ void CADestroyRequestInfoInternal(CARequestInfo_t *rep) // free payload field OICFree((char *) rep->info.payload); + // free uri + OICFree(rep->info.resourceUri); + OICFree(rep); } @@ -308,6 +345,9 @@ void CADestroyResponseInfoInternal(CAResponseInfo_t *rep) // free payload field OICFree((char *) rep->info.payload); + // free uri + OICFree(rep->info.resourceUri); + OICFree(rep); } diff --git a/resource/csdk/connectivity/samples/linux/sample_main.c b/resource/csdk/connectivity/samples/linux/sample_main.c index 432b579..cfbd1d9 100644 --- a/resource/csdk/connectivity/samples/linux/sample_main.c +++ b/resource/csdk/connectivity/samples/linux/sample_main.c @@ -1206,6 +1206,11 @@ void send_response(const CAEndpoint_t *endpoint, const CAInfo_t *info) printf("Send response success\n"); } + if (responseData.payload) + { + free(responseData.payload); + } + printf("=============================================\n"); } diff --git a/resource/csdk/connectivity/src/camessagehandler.c b/resource/csdk/connectivity/src/camessagehandler.c index 4699938..d839c95 100644 --- a/resource/csdk/connectivity/src/camessagehandler.c +++ b/resource/csdk/connectivity/src/camessagehandler.c @@ -184,6 +184,7 @@ static void CADataDestroyer(void *data, uint32_t size) OICFree(info->token); OICFree(info->options); OICFree(info->payload); + OICFree(info->resourceUri); OICFree(cadata->errorInfo); } @@ -536,6 +537,7 @@ void CAHandleRequestResponseCallbacks() } CADataDestroyer(msg, sizeof(CAData_t)); + OICFree(item); #endif OIC_LOG(DEBUG, TAG, "CAHandleRequestResponseCallbacks OUT"); -- 2.7.4