Check iter variable before iterating 47/148847/2 accepted/tizen/unified/20170913.071032 submit/tizen/20170911.125730
authorJiung <jiung.yu@samsung.com>
Mon, 11 Sep 2017 04:55:10 +0000 (13:55 +0900)
committerJiung <jiung.yu@samsung.com>
Mon, 11 Sep 2017 06:57:27 +0000 (15:57 +0900)
Change-Id: I067e0ff3810024aeacb9b59546544e7db83b8533

packaging/wifi-direct-manager.spec
src/wifi-direct-iface.c

index 05a7d7a..39842e1 100644 (file)
@@ -6,7 +6,7 @@
 
 Name:          wifi-direct-manager
 Summary:       Wi-Fi Direct manger
-Version:       1.2.243
+Version:       1.2.244
 Release:       1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
index 6e58f16..fc38c46 100644 (file)
@@ -530,6 +530,11 @@ static void __wfd_manager_manage_iface_handler(const gchar *method_name,
                GVariant *var = NULL;
 
                g_variant_get(parameters, "(a{sv})", &iter);
+               if (!iter) {
+                       ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
+                       goto failed;
+               }
+
                while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
                        if (!g_strcmp0(key, "Mode"))
                                g_variant_get(var, "b", &mode);
@@ -1174,6 +1179,11 @@ static void __wfd_manager_group_iface_handler(const gchar *method_name,
                const char *ssid = NULL;
 
                g_variant_get(parameters, "(a{sv})", &iter);
+               if (!iter) {
+                       ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
+                       goto failed;
+               }
+
                while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
                        if (!g_strcmp0(key, "ssid")) {
                                g_variant_get(var, "&s", &ssid);
@@ -2462,7 +2472,13 @@ static void __g_variant_to_txt_record(GVariant *variant, char **txt_record)
        __WDS_LOG_FUNC_ENTER__;
 
        DBUS_DEBUG_VARIANT(variant);
+
        g_variant_get(variant, "a{sv}", &iter);
+       if (!iter) {
+               __WDS_LOG_FUNC_EXIT__;
+               return;
+       }
+
        while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
                WDS_LOGD("%s %s", key, g_variant_get_string(value, &value_length));
                txt_length += strlen(key);
@@ -2519,6 +2535,10 @@ static void __g_variant_to_seek_info(GVariant *variant, char **seek_info)
 
        DBUS_DEBUG_VARIANT(variant);
        g_variant_get(variant, "as", &iter);
+
+       if (!iter)
+               return;
+
        while (g_variant_iter_loop(iter, "s", &key)) {
                seek_length += strlen(key);
                seek_length += 1;
@@ -2556,6 +2576,10 @@ static void __get_asp_advertise_params(GVariantIter *iter, wfd_oem_asp_service_s
        gchar *key = NULL;
        GVariant *var = NULL;
 
+       if (!iter)
+               return;
+
+
        while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
                if (!g_strcmp0(key, "adv_id"))
                        g_variant_get(var, "u", &(service->adv_id));
@@ -2593,6 +2617,9 @@ static void __get_asp_seek_params(GVariantIter *iter, wfd_oem_asp_service_s *ser
        gchar *key = NULL;
        GVariant *var = NULL;
 
+       if (!iter)
+               return;
+
        while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
                if (!g_strcmp0(key, "discovery_tech"))
                        g_variant_get(var, "i", &(service->discovery_tech));
@@ -2618,6 +2645,9 @@ static void __get_asp_connect_params(GVariantIter *iter, wfd_oem_asp_prov_s *pro
        unsigned char role = 0;
        unsigned int config = 0;
 
+       if (!iter)
+               return;
+
        while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
 
                if (!g_strcmp0(key, "service_mac")) {
@@ -2660,6 +2690,9 @@ static void __get_asp_confirm_params(GVariantIter *iter, wfd_oem_asp_prov_s *pro
        const char *mac_str = NULL;
        const char *pin = NULL;
 
+       if (!iter)
+               return;
+
        while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
 
                if (!g_strcmp0(key, "service_mac")) {
@@ -2727,8 +2760,13 @@ static void __wfd_manager_asp_iface_handler(const gchar *method_name,
                        goto failed;
                }
 
-               memset(&service, 0, sizeof(wfd_oem_asp_service_s));
                g_variant_get(parameters, "(a{sv})", &iter);
+               if (!iter) {
+                       ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
+                       goto failed;
+               }
+
+               memset(&service, 0, sizeof(wfd_oem_asp_service_s));
                __get_asp_advertise_params(iter, &service, &replace);
                ret = wfd_oem_advertise_service(manager->oem_ops, &service, replace);
                if (ret < 0) {
@@ -2810,8 +2848,13 @@ static void __wfd_manager_asp_iface_handler(const gchar *method_name,
                        goto failed;
                }
 
-               memset(&service, 0, sizeof(wfd_oem_asp_service_s));
                g_variant_get(parameters, "(a{sv})", &iter);
+               if (!iter) {
+                       ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
+                       goto failed;
+               }
+
+               memset(&service, 0, sizeof(wfd_oem_asp_service_s));
                __get_asp_seek_params(iter, &service);
                ret = wfd_oem_seek_service(manager->oem_ops, &service);
                if (ret < 0) {
@@ -2887,9 +2930,13 @@ static void __wfd_manager_asp_iface_handler(const gchar *method_name,
                        goto failed;
                }
 
-               memset(&prov_params, 0, sizeof(wfd_oem_asp_prov_s));
-
                g_variant_get(parameters, "(a{sv})", &iter);
+               if (!iter) {
+                       ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
+                       goto failed;
+               }
+
+               memset(&prov_params, 0, sizeof(wfd_oem_asp_prov_s));
                __get_asp_connect_params(iter, &prov_params);
 
                if (ISZEROMACADDR(prov_params.service_mac) ||
@@ -2954,9 +3001,13 @@ static void __wfd_manager_asp_iface_handler(const gchar *method_name,
                        goto failed;
                }
 
-               memset(&prov_params, 0, sizeof(wfd_oem_asp_prov_s));
-
                g_variant_get(parameters, "(a{sv})", &iter);
+               if (!iter) {
+                       ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
+                       goto failed;
+               }
+
+               memset(&prov_params, 0, sizeof(wfd_oem_asp_prov_s));
                __get_asp_confirm_params(iter, &prov_params, &confirmed);
 
                if (ISZEROMACADDR(prov_params.session_mac))     {