From: Sangchul Lee Date: Wed, 28 Oct 2020 05:56:29 +0000 (+0900) Subject: webrtc_source: Fix memory leak when an error occurs in macro X-Git-Tag: submit/tizen/20210729.023123~197 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2007296fa6cf8998feedbd96091fc91623069b33;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source: Fix memory leak when an error occurs in macro [Version] 0.1.45 [Issue Type] Bug fix Change-Id: I33958aed4c8f39cc521c849b7dff93df8b4f0d2d Signed-off-by: Sangchul Lee --- diff --git a/include/webrtc_private.h b/include/webrtc_private.h index e36b7c59..f6dd7913 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -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) \ diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 8879347d..36eb2fd9 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -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 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index fd8bb9b4..e1310a84 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -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");