mm_sound_proxy: null check before variant unref 58/246858/6 origin/sandbox/jcsing/aec accepted/tizen/unified/20201109.123502 submit/tizen/20201109.034524
authorSeungbae Shin <seungbae.shin@samsung.com>
Wed, 4 Nov 2020 12:43:38 +0000 (21:43 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Fri, 6 Nov 2020 10:32:39 +0000 (19:32 +0900)
[Version] 0.13.4
[Issue Type] Revise

Change-Id: Ife96c7915a3c190e77cc9e9d45168828b537deff

mm_sound_proxy.c
packaging/libmm-sound.spec

index 706f28f..86e4621 100644 (file)
@@ -122,12 +122,14 @@ static int parse_device_variant(GVariant *v, int *device_id, const char **device
        if (*stream_num > MAX_STREAM_ON_DEVICE) {
                debug_error("too many streams on device %d", *stream_num);
                ret = MM_ERROR_SOUND_INTERNAL;
-               goto finish;
+               goto cleanup;
        }
 
-       while (g_variant_iter_loop(&array_iter, "i", &stream_id[i++])) ;
-finish:
-       g_variant_unref(array_v);
+       while (g_variant_iter_loop(&array_iter, "i", &stream_id[i++])) {}
+
+cleanup:
+       if (array_v)
+               g_variant_unref(array_v);
 
        return ret;
 }
@@ -304,20 +306,22 @@ int mm_sound_proxy_test(int a, int b, int *get)
 
        if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_SOUND_SERVER, AUDIO_METHOD_TEST, params, &result)) != MM_ERROR_NONE) {
                debug_error("dbus test call failed");
-               g_variant_unref(result);
-               return ret;
+               goto cleanup;
        }
 
        if (result) {
                g_variant_get(result, "(i)",  &reply);
                debug_log("reply : %d", reply);
                *get = reply;
-               g_variant_unref(result);
        } else {
                debug_error("reply null");
                ret = MM_ERROR_SOUND_INTERNAL;
        }
 
+cleanup:
+       if (result)
+               g_variant_unref(result);
+
        debug_fleave();
        return ret;
 }
@@ -355,7 +359,8 @@ int mm_sound_proxy_is_stream_on_device(int stream_id, int device_id, bool *is_on
        }
 
 cleanup:
-       g_variant_unref(result);
+       if (result)
+               g_variant_unref(result);
 
        debug_fleave();
        return ret;
@@ -444,8 +449,8 @@ int mm_sound_proxy_get_current_connected_device_list(int device_flags, GList** d
                        break;
                }
        }
-       g_variant_unref(child);
-
+       if (child)
+               g_variant_unref(child);
 
 #ifdef TIZEN_TV
        device_item = _get_tv_bt_device();
@@ -458,7 +463,8 @@ int mm_sound_proxy_get_current_connected_device_list(int device_flags, GList** d
 #endif /* TIZEN_TV */
 
 cleanup:
-       g_variant_unref(result);
+       if (result)
+               g_variant_unref(result);
 
        debug_fleave();
        return ret;
@@ -514,7 +520,8 @@ int mm_sound_proxy_get_device_by_id(int device_id, mm_sound_device_t **device)
        }
 
 cleanup:
-       g_variant_unref(result);
+       if (result)
+               g_variant_unref(result);
 
        debug_fleave();
        return ret;
@@ -531,17 +538,17 @@ int mm_sound_proxy_add_device_connected_callback(mm_sound_device_connected_wrapp
 
        if ((ret = mm_sound_dbus_signal_subscribe_to(AUDIO_PROVIDER_DEVICE_MANAGER, AUDIO_EVENT_DEVICE_CONNECTED, dbus_callback, cb_data, simple_callback_data_free_func, &cb_data->subs_id)) != MM_ERROR_NONE) {
                debug_error("add device connected callback failed");
-               goto finish;
+               goto cleanup;
        }
 
        if ((ret = _notify_subscription(AUDIO_EVENT_DEVICE_CONNECTED, cb_data->subs_id, TRUE)) != MM_ERROR_NONE) {
                debug_error("failed to notify subscription of device connected event");
-               goto finish;
+               goto cleanup;
        }
 
        *subs_id = cb_data->subs_id;
 
-finish:
+cleanup:
        debug_fleave();
        return ret;
 }
@@ -553,13 +560,13 @@ int mm_sound_proxy_remove_device_connected_callback(unsigned subs_id)
 
        if ((ret = mm_sound_dbus_signal_unsubscribe(subs_id)) != MM_ERROR_NONE) {
                debug_error("remove device connected callback failed");
-               goto finish;
+               goto cleanup;
        }
 
        if ((ret = _notify_subscription(AUDIO_EVENT_DEVICE_CONNECTED, subs_id, FALSE)) != MM_ERROR_NONE)
                debug_error("failed to notify unsubscription of device connected event");
 
-finish:
+cleanup:
        debug_fleave();
        return ret;
 }
@@ -657,7 +664,7 @@ int mm_sound_proxy_remove_device_running_changed_callback(unsigned subs_id)
 int mm_sound_proxy_set_volume_by_type(const char *volume_type, const unsigned volume_level)
 {
        int ret = MM_ERROR_NONE;
-       char *reply = NULL, *direction = "out";
+       const char *reply = NULL, *direction = "out";
        GVariant *params = NULL, *result = NULL;
 
        debug_fenter();
@@ -669,8 +676,7 @@ int mm_sound_proxy_set_volume_by_type(const char *volume_type, const unsigned vo
 
        if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_SET_VOLUME_LEVEL, params, &result)) != MM_ERROR_NONE) {
                debug_error("dbus set volume by type failed");
-               g_variant_unref(result);
-               return ret;
+               goto cleanup;
        }
 
        if (result) {
@@ -680,12 +686,15 @@ int mm_sound_proxy_set_volume_by_type(const char *volume_type, const unsigned vo
                        ret = MM_ERROR_INVALID_ARGUMENT;
                else if (strcmp(reply, "STREAM_MANAGER_RETURN_OK"))
                        ret = MM_ERROR_SOUND_INTERNAL;
-               g_variant_unref(result);
        } else {
                debug_error("reply null");
                ret = MM_ERROR_SOUND_INTERNAL;
        }
 
+cleanup:
+       if (result)
+               g_variant_unref(result);
+
        debug_fleave();
        return ret;
 }
@@ -755,7 +764,7 @@ int mm_sound_proxy_remove_ducking_state_changed_callback(unsigned subs_id)
 int mm_sound_proxy_set_mute_by_type(const char *volume_type, bool mute)
 {
        int ret = MM_ERROR_NONE;
-       char *reply = NULL, *direction = "out";
+       const char *reply = NULL, *direction = "out";
        GVariant *params = NULL, *result = NULL;
 
        debug_fenter();
@@ -767,8 +776,7 @@ int mm_sound_proxy_set_mute_by_type(const char *volume_type, bool mute)
 
        if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_SET_MUTE, params, &result)) != MM_ERROR_NONE) {
                debug_error("dbus set mute by type failed");
-               g_variant_unref(result);
-               return ret;
+               goto cleanup;
        }
 
        if (result) {
@@ -776,20 +784,22 @@ int mm_sound_proxy_set_mute_by_type(const char *volume_type, bool mute)
                debug_log("reply : %s", reply);
                if (strcmp(reply, "STREAM_MANAGER_RETURN_OK"))
                        ret = MM_ERROR_SOUND_INTERNAL;
-               g_variant_unref(result);
        } else {
                debug_error("reply null");
                ret = MM_ERROR_SOUND_INTERNAL;
        }
 
+cleanup:
+       if (result)
+               g_variant_unref(result);
+
        debug_fleave();
        return ret;
 }
 
-int mm_sound_proxy_set_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group)
-{
+int mm_sound_proxy_set_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group) {
        int ret = MM_ERROR_NONE;
-       char *reply = NULL;
+       const char *reply = NULL;
        GVariant *params = NULL, *result = NULL;
 
        debug_fenter();
@@ -799,8 +809,10 @@ int mm_sound_proxy_set_filter_by_type(const char *stream_type, const char *filte
                return MM_ERROR_SOUND_INTERNAL;
        }
 
-       if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_SET_FILTER, params, &result)) != MM_ERROR_NONE)
+       if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_SET_FILTER, params, &result)) != MM_ERROR_NONE) {
                debug_error("dbus set filter by type failed");
+               goto cleanup;
+       }
 
        /* stream-manager always returns a string as return value */
        if (result) {
@@ -808,13 +820,15 @@ int mm_sound_proxy_set_filter_by_type(const char *stream_type, const char *filte
                debug_log("reply : %s", reply);
                if (strcmp(reply, "STREAM_MANAGER_RETURN_OK"))
                        ret = MM_ERROR_SOUND_INTERNAL;
-               g_variant_unref(result);
        } else {
                debug_error("reply null");
-               if (ret == MM_ERROR_NONE)
-                       ret = MM_ERROR_SOUND_INTERNAL;
+               ret = MM_ERROR_SOUND_INTERNAL;
        }
 
+cleanup:
+       if (result)
+               g_variant_unref(result);
+
        debug_fleave();
        return ret;
 }
@@ -822,7 +836,7 @@ int mm_sound_proxy_set_filter_by_type(const char *stream_type, const char *filte
 int mm_sound_proxy_unset_filter_by_type(const char *stream_type)
 {
        int ret = MM_ERROR_NONE;
-       char *reply = NULL;
+       const char *reply = NULL;
        GVariant *params = NULL, *result = NULL;
 
        debug_fenter();
@@ -832,8 +846,10 @@ int mm_sound_proxy_unset_filter_by_type(const char *stream_type)
                return MM_ERROR_SOUND_INTERNAL;
        }
 
-       if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_UNSET_FILTER, params, &result)) != MM_ERROR_NONE)
+       if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_UNSET_FILTER, params, &result)) != MM_ERROR_NONE) {
                debug_error("dbus unset filter by type failed");
+               goto cleanup;
+       }
 
        /* stream-manager always returns a string as return value */
        if (result) {
@@ -841,13 +857,15 @@ int mm_sound_proxy_unset_filter_by_type(const char *stream_type)
                debug_log("reply : %s", reply);
                if (strcmp(reply, "STREAM_MANAGER_RETURN_OK"))
                        ret = MM_ERROR_SOUND_INTERNAL;
-               g_variant_unref(result);
        } else {
                debug_error("reply null");
-               if (ret == MM_ERROR_NONE)
-                       ret = MM_ERROR_SOUND_INTERNAL;
+               ret = MM_ERROR_SOUND_INTERNAL;
        }
 
+cleanup:
+       if (result)
+               g_variant_unref(result);
+
        debug_fleave();
        return ret;
 }
@@ -855,7 +873,7 @@ int mm_sound_proxy_unset_filter_by_type(const char *stream_type)
 int mm_sound_proxy_control_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_controls)
 {
        int ret = MM_ERROR_NONE;
-       char *reply = NULL;
+       const char *reply = NULL;
        GVariant *params = NULL, *result = NULL;
 
        debug_fenter();
@@ -865,23 +883,24 @@ int mm_sound_proxy_control_filter_by_type(const char *stream_type, const char *f
                return MM_ERROR_SOUND_INTERNAL;
        }
 
-       if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_CONTROL_FILTER, params, &result)) != MM_ERROR_NONE)
+       if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_CONTROL_FILTER, params, &result)) != MM_ERROR_NONE) {
                debug_error("dbus control filter by type failed");
-
+               goto cleanup;
+       }
        /* stream-manager always returns a string as return value */
        if (result) {
                g_variant_get(result, "(&s)", &reply);
                debug_log("reply : %s", reply);
                if (strcmp(reply, "STREAM_MANAGER_RETURN_OK"))
                        ret = MM_ERROR_SOUND_INTERNAL;
-               g_variant_unref(result);
        } else {
                debug_error("reply null");
-               if (ret == MM_ERROR_NONE)
-                       ret = MM_ERROR_SOUND_INTERNAL;
+               ret = MM_ERROR_SOUND_INTERNAL;
        }
 
-       g_variant_unref(result);
+cleanup:
+       if (result)
+               g_variant_unref(result);
 
        debug_fleave();
        return ret;
@@ -984,7 +1003,8 @@ int mm_sound_proxy_acquire_focus(int index, mm_sound_focus_type_e type, int opti
                if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_FOCUS_SERVER, AUDIO_METHOD_ACQUIRE_FOCUS, params, &result)) != MM_ERROR_NONE)
                        debug_error("dbus acquire focus failed");
 
-               g_variant_unref(result);
+               if (result)
+                       g_variant_unref(result);
        }
 
        debug_fleave();
@@ -1017,18 +1037,18 @@ int mm_sound_proxy_release_focus(int index, mm_sound_focus_type_e type, int opti
                if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_FOCUS_SERVER, AUDIO_METHOD_RELEASE_FOCUS, params, &result)) != MM_ERROR_NONE)
                        debug_error("dbus release focus failed");
 
-               g_variant_unref(result);
+               if (result)
+                       g_variant_unref(result);
        }
 
        debug_fleave();
-
        return ret;
 }
 
 int mm_sound_proxy_update_stream_focus_status(int focus_id, unsigned int status)
 {
        int ret = MM_ERROR_NONE;
-       char *reply = NULL;
+       const char *reply = NULL;
        GVariant *params = NULL, *result = NULL;
 
        debug_fenter();
@@ -1038,8 +1058,10 @@ int mm_sound_proxy_update_stream_focus_status(int focus_id, unsigned int status)
                return MM_ERROR_SOUND_INTERNAL;
        }
 
-       if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_UPDATE_STREAM_FOCUS_STATUS, params, &result)) != MM_ERROR_NONE)
+       if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_UPDATE_STREAM_FOCUS_STATUS, params, &result)) != MM_ERROR_NONE) {
                debug_error("dbus set volume by type failed");
+               goto cleanup;
+       }
 
        /* stream-manager always returns a string as return value */
        if (result) {
@@ -1047,14 +1069,16 @@ int mm_sound_proxy_update_stream_focus_status(int focus_id, unsigned int status)
                debug_log("reply : %s", reply);
                if (strcmp(reply, "STREAM_MANAGER_RETURN_OK"))
                        ret = MM_ERROR_SOUND_INTERNAL;
-               g_variant_unref(result);
        } else {
                debug_error("reply null");
                ret = MM_ERROR_SOUND_INTERNAL;
        }
 
-       debug_fleave();
+cleanup:
+       if (result)
+               g_variant_unref(result);
 
+       debug_fleave();
        return ret;
 }
 
index c48fba4..8c8fb1b 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-sound
 Summary:    MMSound Package contains client lib and sound_server binary
-Version:    0.13.3
+Version:    0.13.4
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0