From e7f4e50da0a46babf968c266250df1f2a09f620f Mon Sep 17 00:00:00 2001 From: Tobias Stoeckmann Date: Fri, 23 Jul 2021 19:02:33 +0200 Subject: [PATCH] Fix crash when starting without HOME If HOME environment variable is not set, sway fails startup with a segmentation fault due to null pointer dereference. Also check calloc return value and only perform the fallback code when really needed. Signed-off-by: Tobias Stoeckmann --- sway/config.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sway/config.c b/sway/config.c index 39013865..fde386c7 100644 --- a/sway/config.c +++ b/sway/config.c @@ -354,12 +354,14 @@ static char *config_path(const char *prefix, const char *config_folder) { static char *get_config_path(void) { char *path = NULL; const char *home = getenv("HOME"); - size_t size_fallback = 1 + strlen(home) + strlen("/.config"); - char *config_home_fallback = calloc(size_fallback, sizeof(char)); - snprintf(config_home_fallback, size_fallback, "%s/.config", home); + char *config_home_fallback = NULL; const char *config_home = getenv("XDG_CONFIG_HOME"); - if (config_home == NULL || config_home[0] == '\0') { + if ((config_home == NULL || config_home[0] == '\0') && home != NULL) { + size_t size_fallback = 1 + strlen(home) + strlen("/.config"); + config_home_fallback = calloc(size_fallback, sizeof(char)); + if (config_home_fallback != NULL) + snprintf(config_home_fallback, size_fallback, "%s/.config", home); config_home = config_home_fallback; }