From 365f6130c025e2a034ecabed95ee59af08a1613a Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Mon, 20 Dec 2021 19:14:31 -0500 Subject: Handle XDG_DATA_DIRS not being set Tweak logic in app_launcher_update_applications_list to avoid crashing when XDG_DATA_DIRS is not set in the environment. Bug-AGL: SPEC-4160 Signed-off-by: Scott Murray Change-Id: Ia5494f3482a979cbdb22d89e3777d426d4750d4f --- src/app_launcher.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/app_launcher.c b/src/app_launcher.c index 9bb95a4..ddb55c8 100644 --- a/src/app_launcher.c +++ b/src/app_launcher.c @@ -51,9 +51,13 @@ G_DEFINE_TYPE_WITH_CODE(AppLauncher, app_launcher, static void app_launcher_update_applications_list(AppLauncher *self) { g_autoptr(GList) app_list = g_app_info_get_all(); - g_auto(GStrv) dirlist = g_strsplit(getenv("XDG_DATA_DIRS"), ":", -1); + g_auto(GStrv) dirlist = NULL; guint len = g_list_length(app_list); + char *xdg_data_dirs = getenv("XDG_DATA_DIRS"); + if (xdg_data_dirs) + dirlist = g_strsplit(getenv("XDG_DATA_DIRS"), ":", -1); + for (guint i = 0; i < len; i++) { GAppInfo *appinfo = g_list_nth_data(app_list, i); const gchar *desktop_id = g_app_info_get_id(appinfo); @@ -102,16 +106,16 @@ static void app_launcher_update_applications_list(AppLauncher *self) * - its .desktop file contains a "DBusActivatable=true" line * - it provides a corresponding D-Bus service file */ + + /* Default to non-DBus-activatable */ + dbus_activated = FALSE; if (g_desktop_app_info_get_boolean(desktop_info, G_KEY_FILE_DESKTOP_KEY_DBUS_ACTIVATABLE)) { dbus_activated = TRUE; - } else { + } else if (dirlist) { const gchar *desktop_filename = g_desktop_app_info_get_filename(desktop_info); g_autofree gchar *service_file = g_strconcat(app_id, ".service", NULL); - /* Default to non-DBus-activatable */ - dbus_activated = FALSE; - for (GStrv xdg_data_dir = dirlist; *xdg_data_dir != NULL ; xdg_data_dir++) { g_autofree gchar *service_path = NULL; @@ -136,7 +140,7 @@ static void app_launcher_update_applications_list(AppLauncher *self) * GAppInfo retrieves the icon data but doesn't provide a way to retrieve * the corresponding file name, so we have to look it up by ourselves. */ - if (icon) + if (icon && dirlist) icon_path = applaunchd_utils_get_icon(dirlist, g_icon_to_string(icon)); app_info = app_info_new(app_id, g_app_info_get_name(appinfo), -- cgit 1.2.3-korg