From 932e7826aa4ffbfc587c1749c30979ce514477d4 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Tue, 2 Aug 2022 12:14:42 +0200 Subject: common: dont use GError twice We need to use a new one or call `g_clear_error()`. Fix segfault in https://github.com/profanity-im/profanity/issues/1738 --- src/common.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/common.c') diff --git a/src/common.c b/src/common.c index be010d8d..b2496087 100644 --- a/src/common.c +++ b/src/common.c @@ -445,15 +445,16 @@ get_mentions(gboolean whole_word, gboolean case_sensitive, const char* const mes gboolean call_external(gchar** argv, gchar** std_out, gchar** std_err) { + GError *spawn_error, *status_error; + gboolean spawn_result; + gint exit_status; + GSpawnFlags flags = G_SPAWN_SEARCH_PATH; if (std_out == NULL) flags |= G_SPAWN_STDOUT_TO_DEV_NULL; if (std_err == NULL) flags |= G_SPAWN_STDERR_TO_DEV_NULL; - gint exit_status; - gboolean spawn_result; - GError* spawn_error; spawn_result = g_spawn_sync(NULL, // Inherit the parent PWD. argv, NULL, // Inherit the parent environment. @@ -462,12 +463,19 @@ call_external(gchar** argv, gchar** std_out, gchar** std_err) std_out, std_err, &exit_status, &spawn_error); - if (!spawn_result - || !g_spawn_check_exit_status(exit_status, &spawn_error)) { + if (!spawn_result || !g_spawn_check_exit_status(exit_status, &status_error)) { gchar* cmd = g_strjoinv(" ", argv); - log_error("Spawning '%s' failed with '%s'.", cmd, (spawn_error && spawn_error->message) ? spawn_error->message : "No error given"); + if (spawn_error && spawn_error->message) { + log_error("Spawning '%s' failed with '%s'.", cmd, spawn_error->message); + g_error_free(spawn_error); + } else if (status_error && status_error->message) { + log_error("Spawning '%s' failed with '%s'.", cmd, status_error->message); + g_error_free(status_error); + spawn_result = FALSE; + } else { + log_error("Spawning '%s' failed with.", cmd); + } g_free(cmd); - g_error_free(spawn_error); } return spawn_result; -- cgit 1.4.1-2-gfad0