opus: Fix a double-unref in the Opus header code
authorPhilip Withnall <philip.withnall@collabora.co.uk>
Thu, 10 Jul 2014 14:52:46 +0000 (15:52 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 11 Jul 2014 07:05:32 +0000 (09:05 +0200)
The headers were never getting reffed when being added to the headers
list, which is later unreffed-and-freed by the caller (e.g.
gst_opus_parse_parse_frame()).

https://bugzilla.gnome.org/show_bug.cgi?id=733013

ext/opus/gstopusheader.c

index b654aad..3011716 100644 (file)
@@ -190,8 +190,8 @@ gst_opus_header_create_caps_from_headers (GstCaps ** caps, GSList ** headers,
       "multistream", G_TYPE_BOOLEAN, multistream, NULL);
   *caps = _gst_caps_set_buffer_array (*caps, "streamheader", buf1, buf2, NULL);
 
-  *headers = g_slist_prepend (*headers, buf2);
-  *headers = g_slist_prepend (*headers, buf1);
+  *headers = g_slist_prepend (*headers, gst_buffer_ref (buf2));
+  *headers = g_slist_prepend (*headers, gst_buffer_ref (buf1));
 }
 
 void
@@ -218,6 +218,9 @@ gst_opus_header_create_caps (GstCaps ** caps, GSList ** headers, gint nchannels,
   buf2 = gst_opus_enc_create_metadata_buffer (tags);
 
   gst_opus_header_create_caps_from_headers (caps, headers, buf1, buf2);
+
+  gst_buffer_unref (buf2);
+  gst_buffer_unref (buf1);
 }
 
 gboolean