webrtc_source: Fix memory leak when an error occurs in macro 15/246315/3
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 28 Oct 2020 05:56:29 +0000 (14:56 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Mon, 2 Nov 2020 03:06:36 +0000 (12:06 +0900)
[Version] 0.1.45
[Issue Type] Bug fix

Change-Id: I33958aed4c8f39cc521c849b7dff93df8b4f0d2d
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_source.c

index e36b7c590b0cfcee3c99daab990ed88a1fc5fb6f..f6dd791354e96c37a6c17ff490218bf91385004f 100644 (file)
@@ -114,14 +114,12 @@ do { \
        x_elem_info.sink_caps = x_sink_caps; \
        x_elem_info.src_caps = x_src_caps; \
        x_element = _create_element_from_registry(&x_elem_info); \
+       if (!x_element) \
+               LOG_ERROR("failed to create element of [%s]", x_klass_name); \
        if (x_elem_info.sink_caps) \
                gst_caps_unref(x_elem_info.sink_caps); \
        if (x_elem_info.src_caps) \
                gst_caps_unref(x_elem_info.src_caps); \
-       if (!x_element) { \
-               LOG_ERROR("failed to create element of [%s]", x_klass_name); \
-               return WEBRTC_ERROR_INVALID_OPERATION; \
-       } \
 } while (0)
 
 #define MALLOC_AND_INIT_SLOT(x_slot, x_id, x_bin_name, x_webrtcbin) \
index 8879347d4d68ecb65fb5b22bd6787d0be82720ab..36eb2fd9729f2bfc25251b41223402dd013b523b 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.1.44
+Version:    0.1.45
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index fd8bb9b40bbe0ad3fb88da02ab00b49ac9c21aea..e1310a84d00863df362f4a0b65c864042f635e7f 100644 (file)
@@ -245,7 +245,7 @@ static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source
        GstCaps *sink_caps;
        element_info_s elem_info;
        const gchar *encoder_klass_name;
-       gchar *media_type;
+       gchar *media_type = NULL;
 
        RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
        RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
@@ -273,11 +273,17 @@ static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source
                                                __make_default_raw_caps(type, &webrtc->ini),
                                                __make_default_encoded_caps(type, &webrtc->ini, NULL),
                                                *encoder);
+       if (*encoder == NULL)
+               return WEBRTC_ERROR_INVALID_OPERATION;
 
        CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_PAYLOADER_RTP,
                                                __make_default_encoded_caps(type, &webrtc->ini, &media_type),
                                                NULL,
                                                *payloader);
+       if (*payloader == NULL) {
+               g_free(media_type);
+               return WEBRTC_ERROR_INVALID_OPERATION;
+       }
 
        if (!(*queue = _create_element(DEFAULT_ELEMENT_QUEUE, NULL))) {
                LOG_ERROR("failed to create queue");