sdpdemux: ensure that only one srcpad is created per stream

If two senders use the same multicast IP and port then new_session_pad()
may try to add a srcpad to the same stream twice.

stream->srcpad is updated but gst_element_add_pad() fails the second
time. As a result stream->srcpad points to a deleted object and
access in gst_sdp_demux_stream_free() fails with a segfault.

Just ignore the second pad. Nothing useful can be done with it anyway.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4873>
This commit is contained in:
Michael Olbrich 2023-05-11 15:28:35 +02:00 committed by GStreamer Marge Bot
parent 94f2a9cb2b
commit 0fe375dc84

View file

@ -536,6 +536,9 @@ new_session_pad (GstElement * session, GstPad * pad, GstSDPDemux * demux)
if (stream == NULL)
goto unknown_stream;
if (stream->srcpad)
goto unexpected_pad;
stream->ssrc = ssrc;
/* no need for a timeout anymore now */
@ -576,6 +579,13 @@ new_session_pad (GstElement * session, GstPad * pad, GstSDPDemux * demux)
return;
/* ERRORS */
unexpected_pad:
{
GST_DEBUG_OBJECT (demux, "ignoring unexpected session pad");
GST_SDP_STREAM_UNLOCK (demux);
g_free (name);
return;
}
unknown_stream:
{
GST_DEBUG_OBJECT (demux, "ignoring unknown stream");