From 0f64dd1a11eda55c6969dcc7a33239c00b1b99a8 Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Thu, 12 Sep 2013 13:18:14 +0200 Subject: [PATCH] network: Fix empty ignore-hosts setting If the ignore-hosts setting is set to an empty array we were using unintialized memory. This also now ignores zero length strings if there are any in the array. https://bugzilla.gnome.org/show_bug.cgi?id=707966 --- panels/network/net-proxy.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/panels/network/net-proxy.c b/panels/network/net-proxy.c index 5b53f43b1..a883d4c6f 100644 --- a/panels/network/net-proxy.c +++ b/panels/network/net-proxy.c @@ -263,19 +263,22 @@ get_ignore_hosts (GValue *value, GVariant *variant, gpointer user_data) { - int i; - gsize n = 0, avlen; - gchar buffer[10240]; - gchar *p = buffer; - const gchar **av = g_variant_get_strv (variant, &avlen); + GVariantIter iter; + const gchar *s; + gchar **av, **p; + gsize n; - if (avlen > 0) { - n = g_strlcpy (p, av[0], sizeof buffer); - for (i = 1; i < avlen; i ++) - n += g_snprintf (p + n, sizeof (buffer) - n, ", %s", av[i]); - } + n = g_variant_iter_init (&iter, variant); + p = av = g_new0 (gchar *, n + 1); + + while (g_variant_iter_next (&iter, "&s", &s)) + if (s[0] != '\0') { + *p = (gchar *) s; + ++p; + } + + g_value_take_string (value, g_strjoinv (", ", av)); g_free (av); - g_value_set_string (value, buffer); return TRUE; }