[Telepathy-commits] [telepathy-mission-control/master] Dispatcher: check whether g_ascii_strto[u]ll succeeded

Alban Crequy alban.crequy at collabora.co.uk
Mon Nov 24 06:47:35 PST 2008


---
 src/mcd-dispatcher.c |   29 +++++++++++++++++++++++++++--
 1 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 72e05a4..baec558 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -35,6 +35,7 @@
  */
 
 #include <dlfcn.h>
+#include <errno.h>
 #include <glib.h>
 #include <glib/gprintf.h>
 #include <glib/gi18n.h>
@@ -1812,10 +1813,22 @@ parse_client_filter (GKeyFile *file, const gchar *group)
                 {
                     /* g_key_file_get_integer cannot be used because we need
                      * to support 64 bits */
+                    guint i;
                     GValue *value = tp_g_value_slice_new (G_TYPE_UINT64);
                     gchar *str = g_key_file_get_string (file, group, key,
                                                         NULL);
-                    g_value_set_uint64 (value, g_ascii_strtoull (str, NULL, 0));
+                    errno = 0;
+                    i = g_ascii_strtoull (str, NULL, 0);
+                    if (errno != 0)
+                    {
+                        g_warning ("Invalid unsigned integer '%s' in client"
+                                   " file", str);
+                    }
+                    else
+                    {
+                        g_value_set_uint64 (value, i);
+                        g_hash_table_insert (filter, file_property, value);
+                    }
                     g_free (str);
                     break;
                 }
@@ -1825,10 +1838,22 @@ parse_client_filter (GKeyFile *file, const gchar *group)
             case 'i':
             case 'x': /* signed integer */
                 {
+                    gint i;
                     GValue *value = tp_g_value_slice_new (G_TYPE_INT64);
                     gchar *str = g_key_file_get_string (file, group, key,
                                                         NULL);
-                    g_value_set_uint64 (value, g_ascii_strtoll (str, NULL, 0));
+                    errno = 0;
+                    i = g_ascii_strtoll (str, NULL, 0);
+                    if (errno != 0)
+                    {
+                        g_warning ("Invalid signed integer '%s' in client"
+                                   " file", str);
+                    }
+                    else
+                    {
+                        g_value_set_uint64 (value, i);
+                        g_hash_table_insert (filter, file_property, value);
+                    }
                     g_free (str);
                     break;
                 }
-- 
1.5.6.5




More information about the Telepathy-commits mailing list