[gnome-control-center/gnome-3-12] sharing: Avoid truncated folders list in media sharing
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/gnome-3-12] sharing: Avoid truncated folders list in media sharing
- Date: Thu, 24 Jul 2014 10:41:42 +0000 (UTC)
commit 3843a2e30e7d39441e5036d72da8bc8fb5052b8a
Author: Bastien Nocera <hadess hadess net>
Date: Mon Jul 21 19:12:05 2014 +0200
sharing: Avoid truncated folders list in media sharing
When XDG user dirs are badly setup, and the folders list contains items
such as @VIDEOS@ or @MUSIC@, g_get_user_special_dir() returns NULL and
we would insert NULL into the string array. That would cause the code
reading it to assume the end of the array was reached.
Go through a temporary array instead to build it.
https://bugzilla.gnome.org/show_bug.cgi?id=733489
panels/sharing/cc-media-sharing.c | 41 +++++++++++++++++++-----------------
1 files changed, 22 insertions(+), 19 deletions(-)
---
diff --git a/panels/sharing/cc-media-sharing.c b/panels/sharing/cc-media-sharing.c
index 4588e1a..95cbdd6 100644
--- a/panels/sharing/cc-media-sharing.c
+++ b/panels/sharing/cc-media-sharing.c
@@ -127,34 +127,37 @@ cc_media_sharing_get_preferences (gboolean *enabled,
if (folders)
{
gsize length;
- gchar **str_list;
+ GPtrArray *array;
+ char **str_list, **orig_list;
str_list = g_key_file_get_string_list (file, "MediaExport", "uris",
&length, NULL);
-
- *folders = str_list;
+ orig_list = str_list;
+ array = g_ptr_array_new ();
while (str_list && *str_list)
{
+ const char *dir;
+
if (g_str_equal (*str_list, "@MUSIC@"))
- {
- g_free (*str_list);
- *str_list = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_MUSIC));
- }
-
- if (g_str_equal (*str_list, "@VIDEOS@"))
- {
- g_free (*str_list);
- *str_list = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS));
- }
-
- if (g_str_equal (*str_list, "@PICTURES@"))
- {
- g_free (*str_list);
- *str_list = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_PICTURES));
- }
+ dir = g_get_user_special_dir (G_USER_DIRECTORY_MUSIC);
+ else if (g_str_equal (*str_list, "@VIDEOS@"))
+ dir = g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS);
+ else if (g_str_equal (*str_list, "@PICTURES@"))
+ dir = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES);
+ else
+ dir = g_strdup (*str_list);
+
+ if (dir != NULL)
+ g_ptr_array_add (array, g_strdup (dir));
+
str_list++;
}
+
+ g_ptr_array_add (array, NULL);
+
+ *folders = (char **) g_ptr_array_free (array, FALSE);
+ g_strfreev (orig_list);
}
g_key_file_free (file);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]