Fixed to allocated memory as many as deleted 82/183982/1
authormk5004.lee <mk5004.lee@samsung.com>
Thu, 12 Jul 2018 05:14:55 +0000 (14:14 +0900)
committermk5004.lee <mk5004.lee@samsung.com>
Fri, 13 Jul 2018 01:34:04 +0000 (10:34 +0900)
 - case of delete all, an error occurred because size is specified as 100.

Change-Id: I817e79c1310664bd03d1a9d30e0a08ed6cbdbfa2
Signed-off-by: mk5004.lee <mk5004.lee@samsung.com>
src/notification_ipc.c

index f1dbc1c8a2e297316fc1464cb29579aabbf66bc1..40ad1a175c8825bdccb90eba5556adddc884b823 100755 (executable)
@@ -475,28 +475,42 @@ static void _delete_single_notify(GVariant *parameters)
 /* LCOV_EXCL_START */
 static void _delete_multiple_notify(GVariant *parameters)
 {
-       int buf[100] = {0,};
+       int *buf;
        int idx = 0;
+       int num;
        notification_op *noti_op;
        GVariantIter *iter;
        uid_t uid;
 
-       g_variant_get(parameters, "(a(i)i)", &iter, &uid);
-       while (g_variant_iter_loop(iter, "(i)", &buf[idx])) {
+       g_variant_get(parameters, "(a(i)ii)", &iter, &num, &uid);
+       if (num <= 0) {
+               NOTIFICATION_ERR("Invalid number to delete");
+               return;
+       }
+       NOTIFICATION_DBG("Deleted count[%d]", num);
+
+       buf = (int *)malloc(sizeof(int) * num);
+       if (buf == NULL) {
+               NOTIFICATION_ERR("Failed to alloc");
+               return;
+       }
+
+       while (g_variant_iter_loop(iter, "(i)", &buf[idx]) && idx < num) {
                NOTIFICATION_DBG("priv id[%d]", buf[idx]);
                idx++;
        }
        g_variant_iter_free(iter);
 
-       NOTIFICATION_DBG("Deleted count[%d]", idx);
        noti_op = _ipc_create_op(NOTIFICATION_OP_DELETE, idx, buf, idx, NULL);
        if (noti_op == NULL) {
                NOTIFICATION_ERR("Failed to create op");
+               free(buf);
                return;
        }
 
        notification_call_changed_cb_for_uid(noti_op, idx, uid);
        free(noti_op);
+       free(buf);
 }
 /* LCOV_EXCL_STOP */