summaryrefslogtreecommitdiffstats
path: root/main/irssi/CVE-2017-10965-10966.patch
blob: 30b519223123b33ba52c34283d3ae0895d1bef56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
From 29ebac987da1da2c892aed5ed329256b7bc94bca Mon Sep 17 00:00:00 2001
From: Nei <ailin.nemui@gmail.com>
Date: Thu, 29 Jun 2017 13:48:44 +0000
Subject: [PATCH 1/2] Check return value of localtime

Fixes #10
---
 src/core/misc.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/core/misc.c b/src/core/misc.c
index ce49925b1..0b2d8e776 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);

From 73b851c39c11d01199e6c040749fb20e468f6c8d Mon Sep 17 00:00:00 2001
From: ailin-nemui <ailin-nemui@users.noreply.github.com>
Date: Tue, 4 Jul 2017 16:10:55 +0200
Subject: [PATCH 2/2] correct GHashTable usage

---
 src/core/nicklist.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/core/nicklist.c b/src/core/nicklist.c
index 54dfb5fb2..0bc88ab8d 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 */