cddabasesrc: Fix string leaks in the unit test and a leak in cddabasesrc

This commit is contained in:
Sebastian Dröge 2009-09-17 16:57:48 +02:00
parent 6781c4c9c5
commit 901dbc6ab4
2 changed files with 13 additions and 9 deletions

View file

@ -293,6 +293,13 @@ gst_cdda_base_src_finalize (GObject * obj)
static void static void
gst_cdda_base_src_set_device (GstCddaBaseSrc * src, const gchar * device) gst_cdda_base_src_set_device (GstCddaBaseSrc * src, const gchar * device)
{ {
if (src->device)
g_free (src->device);
src->device = NULL;
if (!device)
return;
/* skip multiple slashes */ /* skip multiple slashes */
while (*device == '/' && *(device + 1) == '/') while (*device == '/' && *(device + 1) == '/')
device++; device++;
@ -333,12 +340,7 @@ gst_cdda_base_src_set_property (GObject * object, guint prop_id,
case ARG_DEVICE:{ case ARG_DEVICE:{
const gchar *dev = g_value_get_string (value); const gchar *dev = g_value_get_string (value);
g_free (src->device); gst_cdda_base_src_set_device (src, dev);
if (dev && *dev) {
gst_cdda_base_src_set_device (src, dev);
} else {
src->device = NULL;
}
break; break;
} }
case ARG_TRACK:{ case ARG_TRACK:{

View file

@ -290,20 +290,22 @@ tag_list_has_tag (GstTagList * list, const gchar * tag, GType type)
} }
static void static void
test_uri_parse (const char *uri, const char *device, int track) test_uri_parse (const gchar * uri, const gchar * device, gint track)
{ {
GstElement *foosrc; GstElement *foosrc;
char *set_device; gchar *set_device = NULL;
int set_track; gint set_track = 0;
foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc"); foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc");
fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), uri) == TRUE, fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), uri) == TRUE,
"couldn't set uri %s", uri); "couldn't set uri %s", uri);
g_object_get (foosrc, "device", &set_device, "track", &set_track, NULL); g_object_get (foosrc, "device", &set_device, "track", &set_track, NULL);
fail_unless (set_device != NULL);
fail_unless (strcmp (set_device, device) == 0, fail_unless (strcmp (set_device, device) == 0,
"device set was %s, expected %s", set_device, device); "device set was %s, expected %s", set_device, device);
fail_unless (set_track == track, "track set was %d, expected %d", set_track, fail_unless (set_track == track, "track set was %d, expected %d", set_track,
track); track);
g_free (set_device);
gst_object_unref (foosrc); gst_object_unref (foosrc);
} }