From f1141932fc45fa4bcc87984241b524381c0ab2b3 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Fri, 12 Jun 2020 10:23:31 +0200 Subject: [PATCH] Dont manipulate pointer from getenv Found this when looking to fix bug https://github.com/profanity-im/profanity/issues/1357 Not sure if it is related. man 3 getenv sais: ``` As typically implemented, getenv() returns a pointer to a string within the environment list. The caller must take care not to modify this string, since that would change the environment of the process. ``` --- src/config/files.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/config/files.c b/src/config/files.c index bdaf6a93..ff612d64 100644 --- a/src/config/files.c +++ b/src/config/files.c @@ -170,12 +170,16 @@ files_get_data_path(char *data_base) static char* _files_get_xdg_config_home(void) { - gchar *xdg_config_home = getenv("XDG_CONFIG_HOME"); - if (xdg_config_home) + gchar *xdg_config_home_env = getenv("XDG_CONFIG_HOME"); + gchar *xdg_config_home = NULL; + + if (xdg_config_home_env) { + xdg_config_home = strdup(xdg_config_home_env); g_strstrip(xdg_config_home); + } if (xdg_config_home && (strcmp(xdg_config_home, "") != 0)) { - return strdup(xdg_config_home); + return xdg_config_home; } else { GString *default_path = g_string_new(getenv("HOME")); g_string_append(default_path, "/.config"); @@ -189,12 +193,16 @@ _files_get_xdg_config_home(void) static char* _files_get_xdg_data_home(void) { - gchar *xdg_data_home = getenv("XDG_DATA_HOME"); - if (xdg_data_home) + gchar *xdg_data_home_env = getenv("XDG_DATA_HOME"); + gchar *xdg_data_home = NULL; + + if (xdg_data_home_env) { + xdg_data_home = strdup(xdg_data_home_env); g_strstrip(xdg_data_home); + } if (xdg_data_home && (strcmp(xdg_data_home, "") != 0)) { - return strdup(xdg_data_home); + return xdg_data_home; } else { GString *default_path = g_string_new(getenv("HOME")); g_string_append(default_path, "/.local/share");