From: jaesick.shin Date: Thu, 13 Oct 2016 15:31:53 +0000 (+0900) Subject: Bug fix about memory leak. X-Git-Tag: 1.3.0~1055^2~50 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=da42d80b40bac9fa01354c40139c84cae83ba47f;p=platform%2Fupstream%2Fiotivity.git Bug fix about memory leak. this patch include, bug fix for dynamic analyzer. Change-Id: I9a36d496b76c9d712d80af45492f0e38a7aff4ea Signed-off-by: jaesick.shin Reviewed-on: https://gerrit.iotivity.org/gerrit/13243 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi --- diff --git a/service/notification/src/provider/NSProviderCallbackResponse.c b/service/notification/src/provider/NSProviderCallbackResponse.c index a450959..e079f8c 100644 --- a/service/notification/src/provider/NSProviderCallbackResponse.c +++ b/service/notification/src/provider/NSProviderCallbackResponse.c @@ -90,15 +90,15 @@ void * NSCallbackResponseSchedule(void * ptr) OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData; NSConsumer * consumer = (NSConsumer *)OICMalloc(sizeof(NSConsumer)); - char * consumerId = NSGetValueFromQuery(OICStrdup(request->query), - NS_QUERY_CONSUMER_ID); + char * copyQuery = OICStrdup(request->query); + char * consumerId = NSGetValueFromQuery(copyQuery, NS_QUERY_CONSUMER_ID); if(consumerId) { OICStrcpy(consumer->consumerId, UUID_STRING_SIZE, consumerId); NSSubscribeRequestCb(consumer); } - + OICFree(copyQuery); NSFreeConsumer(consumer); NSFreeOCEntityHandlerRequest(request); diff --git a/service/notification/src/provider/NSProviderListener.c b/service/notification/src/provider/NSProviderListener.c index ae623c6..dfd28e7 100644 --- a/service/notification/src/provider/NSProviderListener.c +++ b/service/notification/src/provider/NSProviderListener.c @@ -49,16 +49,18 @@ OCEntityHandlerResult NSEntityHandlerNotificationCb(OCEntityHandlerFlag flag, { NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - OC_REST_GET"); - char * reqInterface = - NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_INTERFACE); + char * copyQuery = OICStrdup(entityHandlerRequest->query); + char * reqInterface = NSGetValueFromQuery(copyQuery, NS_QUERY_INTERFACE); if (reqInterface && strcmp(reqInterface, NS_INTERFACE_BASELINE) != 0 && strcmp(reqInterface, NS_INTERFACE_READ) != 0) { NS_LOG(ERROR, "Invalid interface"); + OICFree(copyQuery); return ehResult; } + OICFree(copyQuery); NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_POLICY, NSCopyOCEntityHandlerRequest(entityHandlerRequest)); @@ -100,8 +102,9 @@ OCEntityHandlerResult NSEntityHandlerMessageCb(OCEntityHandlerFlag flag, { NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_REST_GET"); - reqInterface = - NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_INTERFACE); + char * copyQuery = OICStrdup(entityHandlerRequest->query); + reqInterface = OICStrdup(NSGetValueFromQuery(copyQuery, NS_QUERY_INTERFACE)); + OICFree(copyQuery); if (reqInterface && strcmp(reqInterface, NS_INTERFACE_BASELINE) != 0 && strcmp(reqInterface, NS_INTERFACE_READ) != 0) @@ -109,7 +112,6 @@ OCEntityHandlerResult NSEntityHandlerMessageCb(OCEntityHandlerFlag flag, NS_LOG(ERROR, "Invalid interface"); return ehResult; } - ehResult = OC_EH_OK; } else @@ -129,6 +131,7 @@ OCEntityHandlerResult NSEntityHandlerMessageCb(OCEntityHandlerFlag flag, NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_REGISTER"); NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n" "Register message observerID : %d\n", entityHandlerRequest->obsInfo.obsId); + NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_SUBSCRIPTION, NSCopyOCEntityHandlerRequest(entityHandlerRequest)); ehResult = OC_EH_OK; @@ -149,9 +152,11 @@ OCEntityHandlerResult NSEntityHandlerMessageCb(OCEntityHandlerFlag flag, } } - NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OUT"); - return NSProviderSendResponse(entityHandlerRequest, payload, reqInterface, ehResult, + ehResult = NSProviderSendResponse(entityHandlerRequest, payload, reqInterface, ehResult, NS_INTERFACE_TYPE_READ, NS_RESOURCE_MESSAGE); + OICFree(reqInterface); + NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OUT"); + return ehResult; } OCEntityHandlerResult NSEntityHandlerSyncCb(OCEntityHandlerFlag flag, @@ -176,8 +181,10 @@ OCEntityHandlerResult NSEntityHandlerSyncCb(OCEntityHandlerFlag flag, if (OC_REST_GET == entityHandlerRequest->method) { - reqInterface = - NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_INTERFACE); + + char * copyQuery = OICStrdup(entityHandlerRequest->query); + reqInterface = OICStrdup(NSGetValueFromQuery(copyQuery, NS_QUERY_INTERFACE)); + OICFree(copyQuery); if (reqInterface && strcmp(reqInterface, NS_INTERFACE_BASELINE) != 0 && strcmp(reqInterface, NS_INTERFACE_READWRITE) != 0) @@ -237,8 +244,12 @@ OCEntityHandlerResult NSEntityHandlerSyncCb(OCEntityHandlerFlag flag, } NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OUT"); - return NSProviderSendResponse(entityHandlerRequest, payload, reqInterface, ehResult, - NS_INTERFACE_TYPE_READWRITE, NS_RESOURCE_SYNC); + + ehResult = NSProviderSendResponse(entityHandlerRequest, payload, reqInterface, ehResult, + NS_INTERFACE_TYPE_READ, NS_RESOURCE_MESSAGE); + OICFree(reqInterface); + + return ehResult; } OCEntityHandlerResult NSEntityHandlerTopicCb(OCEntityHandlerFlag flag, @@ -265,8 +276,9 @@ OCEntityHandlerResult NSEntityHandlerTopicCb(OCEntityHandlerFlag flag, { NS_LOG(DEBUG, "NSEntityHandlerTopicCb - OC_REST_GET"); - reqInterface = - NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_INTERFACE); + char * copyReq = OICStrdup(entityHandlerRequest->query); + reqInterface = OICStrdup(NSGetValueFromQuery(copyReq, NS_QUERY_INTERFACE)); + OICFree(copyReq); if (reqInterface && strcmp(reqInterface, NS_INTERFACE_BASELINE) != 0 && strcmp(reqInterface, NS_INTERFACE_READWRITE) != 0) @@ -307,8 +319,10 @@ OCEntityHandlerResult NSEntityHandlerTopicCb(OCEntityHandlerFlag flag, } NS_LOG(DEBUG, "NSEntityHandlerTopicCb - OUT"); - return NSProviderSendResponse(entityHandlerRequest, payload, reqInterface, ehResult, + ehResult = NSProviderSendResponse(entityHandlerRequest, payload, reqInterface, ehResult, NS_INTERFACE_TYPE_READWRITE, NS_RESOURCE_TOPIC); + OICFree(reqInterface); + return ehResult; } void NSProviderConnectionStateListener(const CAEndpoint_t * info, bool connected) diff --git a/service/notification/src/provider/NSProviderMemoryCache.c b/service/notification/src/provider/NSProviderMemoryCache.c index 49c2b37..2e6034a 100644 --- a/service/notification/src/provider/NSProviderMemoryCache.c +++ b/service/notification/src/provider/NSProviderMemoryCache.c @@ -186,7 +186,8 @@ NSResult NSProviderStorageWrite(NSCacheList * list, NSCacheElement * newObj) } NS_LOG(DEBUG, "Update Data - OUT"); - + OICFree(subData); + OICFree(newObj); pthread_mutex_unlock(&NSCacheMutex); return NS_OK; } diff --git a/service/notification/src/provider/NSProviderSubscription.c b/service/notification/src/provider/NSProviderSubscription.c index f526a46..321109d 100644 --- a/service/notification/src/provider/NSProviderSubscription.c +++ b/service/notification/src/provider/NSProviderSubscription.c @@ -80,8 +80,8 @@ NSResult NSSendAccessPolicyResponse(OCEntityHandlerRequest *entityHandlerRequest NS_LOG_V(DEBUG, "NS Provider ID: %s", NSGetProviderInfo()->providerId); - char * reqInterface = - NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_INTERFACE); + char * copyReq = OICStrdup(entityHandlerRequest->query); + char * reqInterface = NSGetValueFromQuery(copyReq, NS_QUERY_INTERFACE); if (reqInterface && strcmp(reqInterface, NS_INTERFACE_BASELINE) == 0) { @@ -89,6 +89,7 @@ NSResult NSSendAccessPolicyResponse(OCEntityHandlerRequest *entityHandlerRequest OCResourcePayloadAddStringLL(&payload->interfaces, NS_INTERFACE_READ); OCResourcePayloadAddStringLL(&payload->types, NS_ROOT_TYPE); } + OICFree(copyReq); OCRepPayloadSetUri(payload, NS_ROOT_URI); OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId); OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_VERSION, VERSION); @@ -121,10 +122,12 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour { NS_LOG(DEBUG, "NSHandleSubscription - IN"); - char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID); + char * copyReq = OICStrdup(entityHandlerRequest->query); + char * id = NSGetValueFromQuery(copyReq, NS_QUERY_CONSUMER_ID); if(!id) { + OICFree(copyReq); NSFreeOCEntityHandlerRequest(entityHandlerRequest); NS_LOG(ERROR, "Invalid ConsumerID"); return; @@ -237,6 +240,7 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour NSFreeOCEntityHandlerRequest(entityHandlerRequest); } + OICFree(copyReq); NS_LOG(DEBUG, "NSHandleSubscription - OUT"); } @@ -321,10 +325,12 @@ NSResult NSSendConsumerSubResponse(OCEntityHandlerRequest * entityHandlerRequest return NS_ERROR; } - char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID); + char * copyReq = OICStrdup(entityHandlerRequest->query); + char * id = NSGetValueFromQuery(copyReq, NS_QUERY_CONSUMER_ID); if(!id) { + OICFree(copyReq); NSFreeOCEntityHandlerRequest(entityHandlerRequest); NS_LOG(ERROR, "Invalid ConsumerID"); return NS_ERROR; @@ -332,6 +338,7 @@ NSResult NSSendConsumerSubResponse(OCEntityHandlerRequest * entityHandlerRequest NSCacheUpdateSubScriptionState(consumerSubList, id, true); NSSendResponse(id, true); + OICFree(copyReq); NSFreeOCEntityHandlerRequest(entityHandlerRequest); NS_LOG(DEBUG, "NSSendSubscriptionResponse - OUT"); return NS_OK; diff --git a/service/notification/src/provider/NSProviderTopic.c b/service/notification/src/provider/NSProviderTopic.c index 3037467..36abe6d 100644 --- a/service/notification/src/provider/NSProviderTopic.c +++ b/service/notification/src/provider/NSProviderTopic.c @@ -235,7 +235,8 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) { NS_LOG(DEBUG, "NSSendTopicList - IN"); - char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID); + char * copyReq = OICStrdup(entityHandlerRequest->query); + char * id = NSGetValueFromQuery(copyReq, NS_QUERY_CONSUMER_ID); NSTopicLL * topics = NULL; if (!id) @@ -264,6 +265,7 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) if (!payload) { NS_LOG(ERROR, "payload is NULL"); + OICFree(copyReq); return NS_ERROR; } @@ -273,12 +275,12 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, id); } OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId); + OICFree(copyReq); if (topics) { NS_LOG(DEBUG, "topicList is NULL"); size_t dimensionSize = (size_t) NSProviderGetTopicListSize(topics); - NS_LOG_V(DEBUG, "dimensionSize = %d", (int)dimensionSize); if (!dimensionSize) @@ -290,8 +292,7 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) sizeof(OCRepPayload *) * dimensionSize); NS_VERIFY_NOT_NULL(payloadTopicArray, NS_ERROR); - size_t dimensions[3] = - { dimensionSize, 0, 0 }; + size_t dimensions[3] = { dimensionSize, 0, 0 }; for (int i = 0; i < (int) dimensionSize; i++) { @@ -305,7 +306,9 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) OCRepPayloadSetPropInt(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_SELECTION, (int) topics->state); - topics = topics->next; + NSTopicLL * next = topics->next; + OICFree(topics); + topics = next; } OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, @@ -313,15 +316,14 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) } else { - size_t dimensions[3] = - { 0, 0, 0 }; + size_t dimensions[3] = { 0, 0, 0 }; OCRepPayloadSetPropObjectArrayAsOwner(payload, NS_ATTRIBUTE_TOPIC_LIST, (OCRepPayload **) NULL, dimensions); } - char * reqInterface = - NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_INTERFACE); + copyReq = OICStrdup(entityHandlerRequest->query); + char * reqInterface = NSGetValueFromQuery(copyReq, NS_QUERY_INTERFACE); if (reqInterface && strcmp(reqInterface, NS_INTERFACE_BASELINE) == 0) { @@ -329,6 +331,7 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) OCResourcePayloadAddStringLL(&payload->interfaces, NS_INTERFACE_READ); OCResourcePayloadAddStringLL(&payload->types, NS_ROOT_TYPE); } + OICFree(copyReq); response.requestHandle = entityHandlerRequest->requestHandle; response.resourceHandle = entityHandlerRequest->resource;