mpegtsmux: Avoid crash releasing pad with NULL prog
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
Tue, 7 Jul 2020 11:33:53 +0000 (13:33 +0200)
committerJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
Tue, 7 Jul 2020 12:05:04 +0000 (14:05 +0200)
If we release a pad while the muxer is running which has never been used
for aggregation (thus it does not have an assigned program), `prog` is
NULL.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1411>

gst/mpegtsmux/gstbasetsmux.c

index 7f219fa..462cf0e 100644 (file)
@@ -1292,13 +1292,15 @@ gst_base_ts_mux_release_pad (GstElement * element, GstPad * pad)
     GstBaseTsMuxPad *ts_pad = GST_BASE_TS_MUX_PAD (pad);
     gint pid = ts_pad->pid;
 
-    if (ts_pad->prog->pcr_stream == ts_pad->stream) {
-      tsmux_stream_pcr_unref (ts_pad->prog->pcr_stream);
-      ts_pad->prog->pcr_stream = NULL;
-    }
-    if (tsmux_remove_stream (mux->tsmux, pid, ts_pad->prog)) {
-      g_hash_table_remove (mux->programs, GINT_TO_POINTER (ts_pad->prog_id));
+    if (ts_pad->prog) {
+      if (ts_pad->prog->pcr_stream == ts_pad->stream) {
+        tsmux_program_set_pcr_stream (ts_pad->prog, NULL);
+      }
+      if (tsmux_remove_stream (mux->tsmux, pid, ts_pad->prog)) {
+        g_hash_table_remove (mux->programs, GINT_TO_POINTER (ts_pad->prog_id));
+      }
     }
+
     tsmux_resend_pat (mux->tsmux);
     tsmux_resend_si (mux->tsmux);