Fix use-after-free bug with cached settings values

This patch fixes a couple of use-after-free bugs when caching various
string related setting values.

Fixes: #143
This commit is contained in:
Alexander Færøy 2014-09-28 15:48:48 +02:00
commit d9ea224628
4 changed files with 54 additions and 26 deletions

View file

@ -40,7 +40,7 @@
static int keep_privates_count, keep_publics_count;
static int completion_lowercase;
static const char *completion_char, *cmdchars;
static char *completion_char, *cmdchars;
static GSList *global_lastmsgs;
static int completion_auto, completion_strict;
@ -1126,11 +1126,16 @@ static void read_settings(void)
keep_privates_count = settings_get_int("completion_keep_privates");
keep_publics_count = settings_get_int("completion_keep_publics");
completion_lowercase = settings_get_bool("completion_nicks_lowercase");
completion_char = settings_get_str("completion_char");
cmdchars = settings_get_str("cmdchars");
completion_auto = settings_get_bool("completion_auto");
completion_strict = settings_get_bool("completion_strict");
g_free_not_null(completion_char);
completion_char = g_strdup(settings_get_str("completion_char"));
g_free_not_null(cmdchars);
cmdchars = g_strdup(settings_get_str("cmdchars"));
if (*completion_char == '\0') {
/* this would break.. */
completion_auto = FALSE;
@ -1220,4 +1225,7 @@ void chat_completion_deinit(void)
signal_remove("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
signal_remove("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
signal_remove("setup changed", (SIGNAL_FUNC) read_settings);
g_free_not_null(completion_char);
g_free_not_null(cmdchars);
}