From: Sangchul Lee Date: Thu, 10 Oct 2024 01:28:30 +0000 (+0900) Subject: Check the return value of gst_bin_add() X-Git-Tag: accepted/tizen/unified/20241017.114714~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a92d43e6a14cc66afb1261f5cf8f41bde632a850;p=platform%2Fcore%2Fapi%2Fwebrtc.git Check the return value of gst_bin_add() [Version] 1.1.33 [Issue Type] Coverity defects Change-Id: I53b005b655caad3543b693e7efef5b83baa90962 Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index d3b90614..88c142c8 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: 1.1.32 +Version: 1.1.33 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_sink.c b/src/webrtc_sink.c index 74bdaaaf..c7e23f79 100644 --- a/src/webrtc_sink.c +++ b/src/webrtc_sink.c @@ -732,10 +732,15 @@ int _add_rendering_sink_bin(webrtc_s *webrtc, GstPad *src_pad, bool is_audio, we g_signal_connect(decodebin, "autoplug-select", G_CALLBACK(_decodebin_autoplug_select_cb), webrtc); g_signal_connect(decodebin, "element-added", G_CALLBACK(__decodebin_element_added_cb), sink); - gst_bin_add(sink->bin, decodebin); + if (!gst_bin_add(sink->bin, decodebin)) { + LOG_ERROR("failed to gst_bin_add(), adding [%s] to [%s]", GST_ELEMENT_NAME(decodebin), GST_ELEMENT_NAME(sink->bin)); + goto error_before_insert; + } - if (__link_pads(webrtc, src_pad, sink, decodebin) != WEBRTC_ERROR_NONE) + if (__link_pads(webrtc, src_pad, sink, decodebin) != WEBRTC_ERROR_NONE) { + gst_bin_remove(sink->bin, decodebin); goto error_before_insert; + } ASSERT(g_hash_table_insert(webrtc->gst.sink_slots, track_name, (gpointer)sink)); @@ -752,8 +757,7 @@ int _add_rendering_sink_bin(webrtc_s *webrtc, GstPad *src_pad, bool is_audio, we return WEBRTC_ERROR_NONE; error_before_insert: - if (decodebin) - gst_object_unref(GST_OBJECT(decodebin)); + SAFE_GST_OBJECT_UNREF(decodebin); g_free(track_name); g_free(sink); diff --git a/src/webrtc_source_mediapacket.c b/src/webrtc_source_mediapacket.c index a9dd5776..0a0acae4 100644 --- a/src/webrtc_source_mediapacket.c +++ b/src/webrtc_source_mediapacket.c @@ -591,7 +591,11 @@ int _build_mediapacketsrc(webrtc_s *webrtc, webrtc_gst_slot_s *source) _connect_and_append_signal(&source->signals, G_OBJECT(appsrc), "need-data", G_CALLBACK(__appsrc_need_data_cb), source); _connect_and_append_signal(&source->signals, G_OBJECT(appsrc), "enough-data", G_CALLBACK(__appsrc_enough_data_cb), source); - gst_bin_add(source->bin, appsrc); + if (!gst_bin_add(source->bin, appsrc)) { + LOG_ERROR("failed to gst_bin_add(), adding [%s] to [%s]", GST_ELEMENT_NAME(appsrc), GST_ELEMENT_NAME(source->bin)); + gst_object_unref(GST_OBJECT(appsrc)); + return WEBRTC_ERROR_INVALID_OPERATION; + } return WEBRTC_ERROR_NONE; }