fix memory leak in tbm_surface_internal_set_debug_data() 73/105873/5
authorMinsu Han <minsu81.han@samsung.com>
Tue, 20 Dec 2016 01:29:47 +0000 (10:29 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 27 Dec 2016 11:05:20 +0000 (03:05 -0800)
 - old_data->value is come from strdup(). so it should be free.

Change-Id: I130ac337bbbd00b7f4fa89886a5c392fc81180b8
Signed-off-by: Minsu Han <minsu81.han@samsung.com>
src/tbm_surface_internal.c

index 2620ff0..6700234 100644 (file)
@@ -1342,6 +1342,14 @@ tbm_surface_internal_set_debug_data(tbm_surface_h surface, char *key, char *valu
        if (!LIST_IS_EMPTY(&surface->debug_data_list)) {
                LIST_FOR_EACH_ENTRY(old_data, &surface->debug_data_list, item_link) {
                        if (!strcmp(old_data->key, key)) {
+                               if (old_data->value && value && !strncmp(old_data->value, value, strlen(old_data->value))) {
+                                       TBM_TRACE("tbm_surface(%p) Already exist key(%s) and value(%s)!\n", surface, key, value);
+                                       goto add_debug_key_list;
+                               }
+
+                               if (old_data->value)
+                                       free(old_data->value);
+
                                if (value)
                                        old_data->value = strdup(value);
                                else
@@ -1361,6 +1369,7 @@ tbm_surface_internal_set_debug_data(tbm_surface_h surface, char *key, char *valu
 
        LIST_ADD(&debug_data->item_link, &surface->debug_data_list);
 
+add_debug_key_list:
        if (!LIST_IS_EMPTY(&bufmgr->debug_key_list)) {
                LIST_FOR_EACH_ENTRY_SAFE(old_data, tmp, &bufmgr->debug_key_list, item_link) {
                        if (!strcmp(old_data->key, key)) {