qtmux: Fix buffer leak in fragment_buffers
authorPatricia Muscalu <patricia@axis.com>
Thu, 22 Dec 2022 10:16:26 +0000 (11:16 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 22 Dec 2022 14:11:10 +0000 (14:11 +0000)
When pushing buffers from one of the sink pads fail,
make sure that all buffers added to fragment_buffers on other pads
are freed as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3624>

subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c

index 3bab8a3..5f6cf80 100644 (file)
@@ -641,6 +641,8 @@ gst_qt_mux_class_init (GstQTMuxClass * klass)
 static void
 gst_qt_mux_pad_reset (GstQTMuxPad * qtpad)
 {
+  guint i;
+
   qtpad->fourcc = 0;
   qtpad->is_out_of_order = FALSE;
   qtpad->sample_size = 0;
@@ -678,7 +680,13 @@ gst_qt_mux_pad_reset (GstQTMuxPad * qtpad)
     atom_traf_free (qtpad->traf);
     qtpad->traf = NULL;
   }
+  for (i = 0; i < atom_array_get_len (&qtpad->fragment_buffers); i++) {
+    GstBuffer *buf = atom_array_index (&qtpad->fragment_buffers, i);
+    if (buf != NULL)
+      gst_buffer_unref (atom_array_index (&qtpad->fragment_buffers, i));
+  }
   atom_array_clear (&qtpad->fragment_buffers);
+
   if (qtpad->samples)
     g_array_unref (qtpad->samples);
   qtpad->samples = NULL;