Fix various unlikely, but still potential memoryleaks in error code paths
authorHavard Graff <havard.graff@tandberg.com>
Tue, 1 Nov 2011 16:57:59 +0000 (17:57 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Thu, 5 Jan 2012 13:27:23 +0000 (13:27 +0000)
https://bugzilla.gnome.org/show_bug.cgi?id=667311

gst-libs/gst/pbutils/gstdiscoverer-types.c
gst-libs/gst/tag/tags.c
gst/audiotestsrc/gstaudiotestsrc.c
gst/encoding/gstsmartencoder.c
gst/playback/gstplaysink.c
tools/gst-discoverer.c

index 0d48a3d413c84a5208e4946990c6957696911dc8..1f658c97dbb0a66ff36a985e4b8609f13d360d25 100644 (file)
@@ -372,11 +372,13 @@ GstDiscovererInfo *
 gst_discoverer_info_copy (GstDiscovererInfo * ptr)
 {
   GstDiscovererInfo *ret;
-  GHashTable *stream_map = g_hash_table_new (g_direct_hash, NULL);
+  GHashTable *stream_map;
   GList *tmp;
 
   g_return_val_if_fail (ptr != NULL, NULL);
 
+  stream_map = g_hash_table_new (g_direct_hash, NULL);
+
   ret = gst_discoverer_info_new ();
 
   ret->uri = g_strdup (ptr->uri);
index f89b348c7e9a6e8b7337473fd4baf423f3050838..80285ae137dcc1f8e0123bf2fc2bcb511a8823ad 100644 (file)
@@ -501,6 +501,7 @@ gst_tag_freeform_string_to_utf8 (const gchar * data, gint size,
       /* fallback in case iconv implementation doesn't support windows-1252
        * for some reason */
       if (err->code == G_CONVERT_ERROR_NO_CONVERSION) {
+        g_free (utf8);
         utf8 = g_convert (data, size, "UTF-8", "ISO-8859-1", &bytes_read,
             NULL, NULL);
       }
index 4428ccefc1df92bf869905140a74deaeef632c0b..f0808c6095ebf52150139300336bdfef52ed3b08 100644 (file)
@@ -1166,6 +1166,8 @@ gst_audio_test_src_create (GstBaseSrc * basesrc, guint64 offset,
     if (eclass->send_event)
       eclass->send_event (GST_ELEMENT_CAST (basesrc),
           gst_event_new_tag (taglist));
+    else
+      gst_tag_list_free (taglist);
     src->tags_pushed = TRUE;
   }
 
index 97a5635578549fb3dc8bf94a821e77a6ce7ff769..6d2e7781ffd60d5bf1917100ca2419fe8d173ad7 100644 (file)
@@ -644,9 +644,10 @@ gst_smart_encoder_find_elements (GstSmartEncoder * smart_encoder)
 
   gst_caps_unref (tmpl);
 
-  if (gst_caps_is_empty (res))
+  if (gst_caps_is_empty (res)) {
+    gst_caps_unref (res);
     ret = GST_STATE_CHANGE_FAILURE;
-  else
+  else
     smart_encoder->available_caps = res;
 
   GST_DEBUG_OBJECT (smart_encoder, "Done, available_caps:%" GST_PTR_FORMAT,
index 81729e6dc2fb3650470f40a8b7312fe0f86f3b4a..57d194f51fc6ad22e13865df4292d4d5e7047410 100644 (file)
@@ -2867,6 +2867,7 @@ gst_play_sink_convert_frame (GstPlaySink * playsink, GstCaps * caps)
        * on the bus or not. It's not like it's a critical issue regarding
        * playsink behaviour. */
       GST_ERROR ("Error converting frame: %s", err->message);
+      g_error_free (err);
     }
     result = temp;
   }
index 5a168d636e3fbad09edc207ddce86454a70bcc3f..c6d609277f56da0ff7071646af47adf36a515a4c 100644 (file)
@@ -456,6 +456,8 @@ process_file (GstDiscoverer * dc, const gchar * filename)
     g_print ("Analyzing %s\n", uri);
     info = gst_discoverer_discover_uri (dc, uri, &err);
     print_info (info, err);
+    if (err)
+      g_error_free (err);
     gst_discoverer_info_unref (info);
     if (st)
       gst_structure_free (st);