external/wakaama : fixes memory leakage
authorSeongeun Choi <seongeun.choi@samsung.com>
Wed, 31 May 2017 13:58:41 +0000 (22:58 +0900)
committerEunBong Song <eunb.song@samsung.com>
Tue, 11 Jul 2017 01:33:01 +0000 (10:33 +0900)
This patch fixes memory leakage issues in the lwm2m_data_parse(),
registration_handleRequest(), prv_add(), prv_remove(),
and prv_create_client() functions.

Change-Id: I4391512a4c092fb784538c00cd4c6a5f5219f261
Signed-off-by: Seongeun Choi <seongeun.choi@samsung.com>
external/wakaama/core/data.c
external/wakaama/core/registration.c
external/wakaama/examples/client/lwm2mclient.c
external/wakaama/examples/server/lwm2mserver.c

index 0b8602c..2f48c8e 100644 (file)
@@ -74,7 +74,6 @@ static int prv_setBuffer(lwm2m_data_t * dataP,
     dataP->value.asBuffer.buffer = (uint8_t *)lwm2m_malloc(bufferLen);
     if (dataP->value.asBuffer.buffer == NULL)
     {
-        lwm2m_data_free(1, dataP);
         return 0;
     }
     dataP->value.asBuffer.length = bufferLen;
@@ -429,6 +428,8 @@ int lwm2m_data_parse(lwm2m_uri_t * uriP,
                      lwm2m_media_type_t format,
                      lwm2m_data_t ** dataP)
 {
+    int res;
+
     LOG_ARG("format: %s, bufferLen: %d", STR_MEDIA_TYPE(format), bufferLen);
     LOG_URI(uriP);
     switch (format)
@@ -439,7 +440,13 @@ int lwm2m_data_parse(lwm2m_uri_t * uriP,
         if (*dataP == NULL) return 0;
         (*dataP)->id = uriP->resourceId;
         (*dataP)->type = LWM2M_TYPE_STRING;
-        return prv_setBuffer(*dataP, buffer, bufferLen);
+        res = prv_setBuffer(*dataP, buffer, bufferLen);
+        if (res == 0)
+        {
+            lwm2m_data_free(1, *dataP);
+            *dataP = NULL;
+        }
+        return res;
 
     case LWM2M_CONTENT_OPAQUE:
         if (!LWM2M_URI_IS_SET_RESOURCE(uriP)) return 0;
@@ -447,7 +454,13 @@ int lwm2m_data_parse(lwm2m_uri_t * uriP,
         if (*dataP == NULL) return 0;
         (*dataP)->id = uriP->resourceId;
         (*dataP)->type = LWM2M_TYPE_OPAQUE;
-        return prv_setBuffer(*dataP, buffer, bufferLen);
+        res = prv_setBuffer(*dataP, buffer, bufferLen);
+        if (res == 0)
+        {
+            lwm2m_data_free(1, *dataP);
+            *dataP = NULL;
+        }
+        return res;
 
 #ifdef LWM2M_OLD_CONTENT_FORMAT_SUPPORT
     case LWM2M_CONTENT_TLV_OLD:
index 7d1d0da..8599254 100644 (file)
@@ -1036,6 +1036,10 @@ coap_status_t registration_handleRequest(lwm2m_context_t * contextP,
                 if (msisdn != NULL) lwm2m_free(msisdn);
                 return COAP_412_PRECONDITION_FAILED;
             }
+            if (version != NULL)
+            {
+                lwm2m_free(version);
+            }
 
             if (lifetime == 0)
             {
index 8fc52bc..93bb056 100644 (file)
@@ -664,10 +664,12 @@ static void prv_add(char * buffer,
         fprintf(stdout, "Adding object 1024 failed: ");
         print_status(stdout, res);
         fprintf(stdout, "\r\n");
+        free_test_object(objectP);
     }
     else
     {
         fprintf(stdout, "Object 1024 added.\r\n");
+        objArray[5] = objectP;
     }
     return;
 }
@@ -678,6 +680,8 @@ static void prv_remove(char * buffer,
     lwm2mH = (lwm2m_context_t *)user_data;
     int res;
 
+    lwm2m_object_t * objectP;
+    objectP = (lwm2m_object_t *)LWM2M_LIST_FIND(lwm2mH->objectList, 1024);
     res = lwm2m_remove_object(lwm2mH, 1024);
     if (res != 0)
     {
@@ -688,6 +692,8 @@ static void prv_remove(char * buffer,
     else
     {
         fprintf(stdout, "Object 1024 removed.\r\n");
+        free_test_object(objectP);
+        objArray[5] = NULL;
     }
     return;
 }
index 007f2bf..193cc7d 100644 (file)
@@ -660,12 +660,18 @@ static void prv_create_client(char * buffer,
 
         format = LWM2M_CONTENT_TLV;
         temp_length = lwm2m_data_serialize(NULL, 1, dataP, &format, &temp_buffer);
+        lwm2m_data_free(1, dataP);
     }
    /* End Client dependent part*/
 
     //Create
     result = lwm2m_dm_create(lwm2mH, clientId, &uri, format, temp_buffer, temp_length, prv_result_callback, NULL);
 
+    if (temp_buffer != NULL)
+    {
+        lwm2m_free(temp_buffer);
+    }
+
     if (result == 0)
     {
         fprintf(stdout, "OK");