summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/notification_ipc.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/notification_ipc.c b/src/notification_ipc.c
index f1dbc1c..40ad1a1 100755
--- a/src/notification_ipc.c
+++ b/src/notification_ipc.c
@@ -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 */