Fix GError handling
Several users have reported segfaults when starting up profanity which has OMEMO support, but OMEMO is not set up yet. @StefanKropp has been able to reproduce this and tracked it down to `_load_identity()` calling `omemo_known_devices_keyfile_save()`. The latter then calls `save_keyfile()` which calls `g_key_file_save_to_file()`. This can then fail if one of the first two strings is NULL and won't set the `error` on return. In its error handling `save_keyfile()` unconditionally dereferences `error` which leads to the segfault. Fix this and also go through the entire codebase and verify that the usage of `GError` is done correctly. Signed-off-by: Steffen Jaeckel <s@jaeckel.eu>
This commit is contained in:
@@ -7040,20 +7040,16 @@ cmd_plugins(ProfWin* window, const char* const command, gchar** args)
|
||||
GDir* global_cp_dir = NULL;
|
||||
|
||||
if (access(GLOBAL_PYTHON_PLUGINS_PATH, R_OK) == 0) {
|
||||
GError* error = NULL;
|
||||
global_pyp_dir = g_dir_open(GLOBAL_PYTHON_PLUGINS_PATH, 0, &error);
|
||||
if (error) {
|
||||
global_pyp_dir = g_dir_open(GLOBAL_PYTHON_PLUGINS_PATH, 0, NULL);
|
||||
if (global_pyp_dir == NULL) {
|
||||
log_warning("Error when trying to open global plugins path: %s", GLOBAL_PYTHON_PLUGINS_PATH);
|
||||
g_error_free(error);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
if (access(GLOBAL_C_PLUGINS_PATH, R_OK) == 0) {
|
||||
GError* error = NULL;
|
||||
global_cp_dir = g_dir_open(GLOBAL_C_PLUGINS_PATH, 0, &error);
|
||||
if (error) {
|
||||
global_cp_dir = g_dir_open(GLOBAL_C_PLUGINS_PATH, 0, NULL);
|
||||
if (global_cp_dir == NULL) {
|
||||
log_warning("Error when trying to open global plugins path: %s", GLOBAL_C_PLUGINS_PATH);
|
||||
g_error_free(error);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user