From 901dbc6ab4579398cc1b5f7a80a52a101cfaef54 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 17 Sep 2009 16:57:48 +0200 Subject: [PATCH] cddabasesrc: Fix string leaks in the unit test and a leak in cddabasesrc --- gst-libs/gst/cdda/gstcddabasesrc.c | 14 ++++++++------ tests/check/libs/cddabasesrc.c | 8 +++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/gst-libs/gst/cdda/gstcddabasesrc.c b/gst-libs/gst/cdda/gstcddabasesrc.c index 2e4ed57..5353a5b 100644 --- a/gst-libs/gst/cdda/gstcddabasesrc.c +++ b/gst-libs/gst/cdda/gstcddabasesrc.c @@ -293,6 +293,13 @@ gst_cdda_base_src_finalize (GObject * obj) static void 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 */ while (*device == '/' && *(device + 1) == '/') device++; @@ -333,12 +340,7 @@ gst_cdda_base_src_set_property (GObject * object, guint prop_id, case ARG_DEVICE:{ const gchar *dev = g_value_get_string (value); - g_free (src->device); - if (dev && *dev) { - gst_cdda_base_src_set_device (src, dev); - } else { - src->device = NULL; - } + gst_cdda_base_src_set_device (src, dev); break; } case ARG_TRACK:{ diff --git a/tests/check/libs/cddabasesrc.c b/tests/check/libs/cddabasesrc.c index 4be1ae9..b93ee38 100644 --- a/tests/check/libs/cddabasesrc.c +++ b/tests/check/libs/cddabasesrc.c @@ -290,20 +290,22 @@ tag_list_has_tag (GstTagList * list, const gchar * tag, GType type) } 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; - char *set_device; - int set_track; + gchar *set_device = NULL; + gint set_track = 0; foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc"); fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), uri) == TRUE, "couldn't set uri %s", uri); g_object_get (foosrc, "device", &set_device, "track", &set_track, NULL); + fail_unless (set_device != NULL); fail_unless (strcmp (set_device, device) == 0, "device set was %s, expected %s", set_device, device); fail_unless (set_track == track, "track set was %d, expected %d", set_track, track); + g_free (set_device); gst_object_unref (foosrc); } -- 2.7.4