storage: check that the string isn't empty before splitting
authorRoss Burton <ross.burton@intel.com>
Wed, 18 Jul 2012 09:37:38 +0000 (10:37 +0100)
committerDaniel Wagner <daniel.wagner@bmw-carit.de>
Wed, 18 Jul 2012 09:52:16 +0000 (11:52 +0200)
If the string was non-NULL but empty (str="\0"), the following \0 assignment
would write to str[-1] and thus cause memory corruption.

On PPC and MIPS, this was causing crashes in glibc.

src/storage.c

index 47bd0cb..20766a3 100644 (file)
@@ -212,7 +212,11 @@ gchar **connman_storage_get_services()
        closedir(dir);
 
        str = g_string_free(result, FALSE);
-       if (str) {
+       if (str && str[0] != '\0') {
+               /*
+                * Remove the trailing separator so that services doesn't end up
+                * with an empty element.
+                */
                str[strlen(str) - 1] = '\0';
                services = g_strsplit(str, "/", -1);
        }