summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorArnavion <arnavion@gmail.com>2015-01-14 16:29:03 -0800
committerArnavion <arnavion@gmail.com>2015-01-14 16:29:03 -0800
commit1d316710ed7699a43ffe8a889da7680cbb2d57f3 (patch)
tree87808d3b33a2b4e76857e892b955ffb01d74169c
parentaab243592f9a72682216dfeeaa891200a79ac0a1 (diff)
Don't crash if the log file can't be opened.
Found in #1269
-rw-r--r--src/common/text.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/common/text.c b/src/common/text.c
index 729f18dd..11a4595a 100644
--- a/src/common/text.c
+++ b/src/common/text.c
@@ -707,7 +707,9 @@ log_write (session *sess, char *text, time_t ts)
 	}
 
 	if (sess->logfd == -1)
+	{
 		log_open (sess);
+	}
 
 	/* change to a different log file? */
 	file = log_create_pathname (sess->server->servername, sess->channel, server_get_network (sess->server, FALSE));
@@ -715,12 +717,22 @@ log_write (session *sess, char *text, time_t ts)
 	{
 		if (g_access (file, F_OK) != 0)
 		{
-			close (sess->logfd);
+			if (sess->logfd != -1)
+			{
+				close (sess->logfd);
+			}
+
 			sess->logfd = log_open_file (sess->server->servername, sess->channel, server_get_network (sess->server, FALSE));
 		}
+
 		g_free (file);
 	}
 
+	if (sess->logfd == -1)
+	{
+		return;
+	}
+
 	if (prefs.hex_stamp_log)
 	{
 		if (!ts) ts = time(0);
@@ -731,6 +743,7 @@ log_write (session *sess, char *text, time_t ts)
 			g_free (stamp);
 		}
 	}
+
 	temp = strip_color (text, -1, STRIP_ALL);
 	len = strlen (temp);
 	write (sess->logfd, temp, len);