Fix memory leak 57/101257/3
authorseungha.son <seungha.son@samsung.com>
Wed, 30 Nov 2016 12:25:05 +0000 (21:25 +0900)
committerSon seungha <seungha.son@samsung.com>
Fri, 2 Dec 2016 04:30:35 +0000 (20:30 -0800)
 - The buffer pointed by the dynamically allocated structure is
   changed without free the memory under certain conditions.
   No pointer to buffer allocated by malloc.

Signed-off-by: seungha.son <seungha.son@samsung.com>
Change-Id: I93edc9726ee5dbaf8c4e8729ab9f9551e247d600

src/notification_service.c

index 2830f7f..1e3c45b 100755 (executable)
@@ -1332,6 +1332,23 @@ static gint _dnd_data_compare(gconstpointer a, gconstpointer b)
        return 1;
 }
 
+static dnd_alarm_id_s *__malloc_dnd_alarm_id_s(uid_t uid, alarm_id_t start_alarm_id, alarm_id_t end_alarm_id)
+{
+       dnd_alarm_id_s *dnd_id_data = NULL;
+
+       dnd_id_data = (dnd_alarm_id_s *)malloc(sizeof(dnd_alarm_id_s));
+       if (dnd_id_data == NULL) {
+               ErrPrint("memory allocation fail");
+               return NULL;
+       }
+
+       dnd_id_data->uid = uid;
+       dnd_id_data->dnd_start_id = dnd_schedule_start_alarm_id;
+       dnd_id_data->dnd_end_id = dnd_schedule_end_alarm_id;
+
+       return dnd_id_data;
+}
+
 static int _add_alarm(int dnd_schedule_day, int dnd_start_hour, int dnd_start_min, int dnd_end_hour, int dnd_end_min, uid_t uid)
 {
        int ret = NOTIFICATION_ERROR_NONE;
@@ -1358,17 +1375,10 @@ static int _add_alarm(int dnd_schedule_day, int dnd_start_hour, int dnd_start_mi
                return ret;
        }
 
-       dnd_id_data = (dnd_alarm_id_s *)malloc(sizeof(dnd_alarm_id_s));
-       if (dnd_id_data == NULL) {
-               ErrPrint("memory allocation fail");
-               return NOTIFICATION_ERROR_OUT_OF_MEMORY;
-       }
-
-       dnd_id_data->uid = uid;
-       dnd_id_data->dnd_start_id = dnd_schedule_start_alarm_id;
-       dnd_id_data->dnd_end_id = dnd_schedule_end_alarm_id;
-
        if (_dnd_alarm_id_list == NULL) {
+               dnd_id_data = __malloc_dnd_alarm_id_s(uid, dnd_schedule_start_alarm_id, dnd_schedule_end_alarm_id);
+               if (!dnd_id_data)
+                       return NOTIFICATION_ERROR_OUT_OF_MEMORY;
                _dnd_alarm_id_list = g_list_append(_dnd_alarm_id_list, dnd_id_data);
        } else {
                found_list = g_list_find_custom(g_list_first(_dnd_alarm_id_list), GUINT_TO_POINTER(uid),
@@ -1384,6 +1394,9 @@ static int _add_alarm(int dnd_schedule_day, int dnd_start_hour, int dnd_start_mi
                                dnd_id_data->dnd_end_id = dnd_schedule_end_alarm_id;
                        }
                } else {
+                       dnd_id_data = __malloc_dnd_alarm_id_s(uid, dnd_schedule_start_alarm_id, dnd_schedule_end_alarm_id);
+                       if (!dnd_id_data)
+                               return NOTIFICATION_ERROR_OUT_OF_MEMORY;
                        _dnd_alarm_id_list = g_list_append(_dnd_alarm_id_list, dnd_id_data);
                }
        }