From 13e013282969aed33da3344fc3ee04b91fc210f3 Mon Sep 17 00:00:00 2001 From: "sanghyeok.oh" Date: Thu, 23 Apr 2020 16:21:14 +0900 Subject: [PATCH] dbus: Fix wrong usage of GVariant Change-Id: Ia0b20203a0b3e1ae45e4f0aa96dfd9501cc80bea --- apps/extended-sd/src/es-internal-storage-page.c | 7 ++- apps/extended-sd/src/es-portable-storage-page.c | 80 +++++++++++++++---------- apps/extended-sd/src/extended-sd-main.c | 17 ++++-- src/auto-test/block.c | 24 +++++++- 4 files changed, 86 insertions(+), 42 deletions(-) diff --git a/apps/extended-sd/src/es-internal-storage-page.c b/apps/extended-sd/src/es-internal-storage-page.c index 55f3d57..3d4e26c 100644 --- a/apps/extended-sd/src/es-internal-storage-page.c +++ b/apps/extended-sd/src/es-internal-storage-page.c @@ -149,7 +149,12 @@ check_speed_done(GVariant *result, void *data, GError *err) ret_if(ad == NULL); ret_if(result == NULL); - g_variant_get(result, "(i)", &ret); + if (!dh_get_param_from_var(result, "(i)", &ret)) { + _E("Failed to get params from gvariant. expected:%s, type:%s", "(i)", g_variant_get_type_string(result)); + g_variant_unref(result); + return; + } + if (ret < 0) { DMSG("Performance warning: %d", ret); Evas_Object* page_content = elm_object_part_content_unset(ad->internal_storage_page_data->internal_storage_page_base_layout, "elm.swallow.content"); diff --git a/apps/extended-sd/src/es-portable-storage-page.c b/apps/extended-sd/src/es-portable-storage-page.c index 555d6ba..52cdda6 100644 --- a/apps/extended-sd/src/es-portable-storage-page.c +++ b/apps/extended-sd/src/es-portable-storage-page.c @@ -58,17 +58,21 @@ format_done(GVariant *result, void *data, GError *err) ret_if(ad == NULL); ret_if(result == NULL); - g_variant_get(result, "(i)", &ret); + if (!dh_get_param_from_var(result, "(i)", &ret)) { + DMSG("Failed to get params from gvariant. expected:%s, type:%s", "(i)", g_variant_get_type_string(result)); + goto out; + } + if (ret < 0) { DMSG("Failed to format sd card as portable storage: %d", ret); - return; + goto out; } ret = dbus_handle_method_sync_var(STORAGED_BUS_NAME, STORAGED_PATH_BLOCK_MANAGER, STORAGED_INTERFACE_BLOCK_MANAGER, "Mount", g_variant_new("(is)", ad->storage_id, "")); if (ret < 0) { DMSG("Failed to mount sd card as portable storage: %d", ret); - return; + goto out; } Evas_Object* page_content = elm_object_part_content_unset(ad->portable_storage_page_data->portable_storage_page_base_layout, "elm.swallow.content"); @@ -76,6 +80,7 @@ format_done(GVariant *result, void *data, GError *err) page_content = create_page_3(ad); elm_object_part_content_set(ad->portable_storage_page_data->portable_storage_page_base_layout, "elm.swallow.content", page_content); +out: g_variant_unref(result); FUNC_END(); } @@ -90,7 +95,6 @@ mapper_device_cb(int mapper_id, storage_dev_e dev, storage_state_e state, GVariant *output; GVariantIter *iter; char *new_fstype; - bool new_primary; int ret; int id; @@ -111,33 +115,38 @@ mapper_device_cb(int mapper_id, storage_dev_e dev, storage_state_e state, if (state != STORAGE_STATE_REMOVED) return; - output = dbus_handle_method_sync_with_reply_var(STORAGED_BUS_NAME, - STORAGED_PATH_BLOCK_MANAGER, STORAGED_INTERFACE_BLOCK_MANAGER, "GetDeviceList", g_variant_new("(s)", "mmc")); - if (!output) { - DMSG("Failed to get storage information."); - return; - } + if (primary) { + output = dbus_handle_method_sync_with_reply_var(STORAGED_BUS_NAME, + STORAGED_PATH_BLOCK_MANAGER, STORAGED_INTERFACE_BLOCK_MANAGER, "GetDeviceList", g_variant_new("(s)", "mmc")); + if (!output) { + DMSG("Failed to get storage information."); + return; + } + if (!dh_get_param_from_var(output, "(a(issssssisibii))", &iter)) { + DMSG("Failed to get params from gvariant. expected:%s, type:%s", "(a(issssssisibii))", g_variant_get_type_string(output)); + g_variant_unref(output); + return; + } - g_variant_get(output, "(a(issssssisibii))", &iter); - - while (g_variant_iter_loop(iter, "(issssssisibii)", - NULL, NULL, NULL, - NULL, &new_fstype, - NULL, NULL, - NULL, NULL, - NULL, &new_primary, - NULL, &id)) { - if (!primary) - continue; - if (strncmp(new_fstype, LUKS_NAME, strlen(LUKS_NAME) + 1)) - continue; - - DMSG("Get Primary MMC=%d", id); - ad->storage_id = id; - break; - } + while (g_variant_iter_loop(iter, "(issssssisibii)", + NULL, NULL, NULL, + NULL, &new_fstype, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, &id)) { + if (strncmp(new_fstype, LUKS_NAME, strlen(LUKS_NAME) + 1)) + continue; + + DMSG("Get Primary MMC=%d", id); + ad->storage_id = id; + break; + } - g_variant_iter_free(iter); + g_free(new_fstype); + g_variant_iter_free(iter); + g_variant_unref(output); + } ret = dbus_handle_method_async_with_reply_var(STORAGED_BUS_NAME, STORAGED_PATH_BLOCK_MANAGER, @@ -163,12 +172,17 @@ unmount_done(GVariant *result, void *data, GError *err) ret_if(ad == NULL); ret_if(result == NULL); - g_variant_get(result, "(i)", &ret); - if (ret < 0) { - DMSG("Failed to format sd card as portable storage: %d", ret); - return; + if (!dh_get_param_from_var(result, "(i)", &ret)) { + _E("Failed to get params from gvariant. expected:%s, type:%s", "(i)", g_variant_get_type_string(result)); + goto out; } + if (ret < 0) + DMSG("Failed to format sd card as portable storage: %d", ret); + +out: + g_variant_unref(result); + FUNC_END(); } diff --git a/apps/extended-sd/src/extended-sd-main.c b/apps/extended-sd/src/extended-sd-main.c index 0fe6cda..dc7709f 100644 --- a/apps/extended-sd/src/extended-sd-main.c +++ b/apps/extended-sd/src/extended-sd-main.c @@ -146,19 +146,26 @@ app_control(app_control_h app_control, void *data) create_home_page_base_layout(ad); output = dbus_handle_method_sync_with_reply_var(STORAGED_BUS_NAME, - STORAGED_PATH_BLOCK_MANAGER, STORAGED_INTERFACE_BLOCK_MANAGER, "GetMmcPrimary", NULL); + STORAGED_PATH_BLOCK_MANAGER, + STORAGED_INTERFACE_BLOCK_MANAGER, + "GetMmcPrimary", + NULL); if (!output) { DMSG("Failed to get storage information."); return; } - - g_variant_get(output, "(issssssisibii)", NULL, &devpath, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &id); + if (!dh_get_param_from_var(output, "(issssssisibii)", NULL, &devpath, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &id)) { + DMSG("Failed to get params from gvariant. expected:%s, type:%s", "(issssssisibii)", g_variant_get_type_string(output)); + g_variant_unref(output); + return; + } DMSG("Get Primary MMC=%d devpath=%s", id, devpath); ad->storage_id = id; - ad->devpath = strdup(devpath); + ad->devpath = devpath; + g_variant_unref(output); } static void diff --git a/src/auto-test/block.c b/src/auto-test/block.c index 262ceb9..553d9be 100644 --- a/src/auto-test/block.c +++ b/src/auto-test/block.c @@ -141,17 +141,24 @@ static bool block_getdevicelist(char *type) return ret; } - g_variant_get(msg, "(a(issssssisibii))", &iter); + if (!dh_get_param_from_var(msg, "(a(issssssisibii))", &iter)) { + _E("Failed to get params from gvariant. expected:%s, type:%s", "(a(issssssisibii))", g_variant_get_type_string(msg)); + g_variant_unref(msg); + return ret; + } + while (g_variant_iter_loop(iter, "(issssssisibii)", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &val)) { _D("Device id=%d", val); ret = TRUE; } - g_variant_iter_free(iter); _I("Success. (%s): %d", METHOD_BLOCK_GETDEVICELIST, ret); + + g_variant_unref(msg); + return ret; } @@ -174,7 +181,12 @@ static bool block_getdevicelist2(char *type) return ret; } - g_variant_get(msg, "(a(issssssisibi))", &iter); + if (!dh_get_param_from_var(msg, "(a(issssssisibi))", &iter)) { + _E("Failed to get params from gvariant. expected:%s, type:%s", "(a(issssssisibi))", g_variant_get_type_string(msg)); + g_variant_unref(msg); + return ret; + } + while (g_variant_iter_loop(iter, "(issssssisibi)", NULL, &val, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) { @@ -185,6 +197,8 @@ static bool block_getdevicelist2(char *type) g_variant_iter_free(iter); _I("Success. %s: %d", METHOD_BLOCK_GETDEVICELIST2, ret); + + g_variant_unref(msg); return ret; } @@ -243,6 +257,8 @@ static bool block_getdeviceinfo(int id) } _I("Success. %s: %d", METHOD_BLOCK_GETDEVICEINFO, ret); + + g_variant_unref(msg); return ret; } @@ -273,6 +289,8 @@ static bool block_getmmcprimary() _D("Id=%d", val); _I("Success. %s: %d", METHOD_BLOCK_GETMMCPRIMARY, ret); + + g_variant_unref(msg); return ret; } -- 2.7.4