From 5e46c6dda0993aff058baba03726d4454139ccfe Mon Sep 17 00:00:00 2001 From: Nei Date: Wed, 5 Jul 2017 14:47:30 +0000 Subject: [PATCH] Merge branch 'security' into 'master' Security Closes #10 See merge request !17 (cherry picked from commit 5e26325317c72a04c1610ad952974e206384d291) --- src/core/misc.c | 3 +++ src/core/nicklist.c | 17 ++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/core/misc.c b/src/core/misc.c index 0f038cbb..14af656f 100644 --- a/src/core/misc.c +++ b/src/core/misc.c @@ -560,6 +560,9 @@ char *my_asctime(time_t t) int len; tm = localtime(&t); + if (tm == NULL) + return g_strdup("???"); + str = g_strdup(asctime(tm)); len = strlen(str); diff --git a/src/core/nicklist.c b/src/core/nicklist.c index 54dfb5fb..0bc88ab8 100644 --- a/src/core/nicklist.c +++ b/src/core/nicklist.c @@ -54,23 +54,26 @@ static void nick_hash_add(CHANNEL_REC *channel, NICK_REC *nick) static void nick_hash_remove(CHANNEL_REC *channel, NICK_REC *nick) { - NICK_REC *list; + NICK_REC *list, *newlist; list = g_hash_table_lookup(channel->nicks, nick->nick); if (list == NULL) return; - if (list == nick || list->next == NULL) { - g_hash_table_remove(channel->nicks, nick->nick); - if (list->next != NULL) { - g_hash_table_insert(channel->nicks, nick->next->nick, - nick->next); - } + if (list == nick) { + newlist = nick->next; } else { + newlist = list; while (list->next != nick) list = list->next; list->next = nick->next; } + + g_hash_table_remove(channel->nicks, nick->nick); + if (newlist != NULL) { + g_hash_table_insert(channel->nicks, newlist->nick, + newlist); + } } /* Add new nick to list */