aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2013-03-08 11:28:15 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2013-03-08 11:28:15 +0100
commit29e3e409a36256cd1bf49c58970ebbeff8151497 (patch)
tree50ab6b00f3b28924c390212732d436bcef89bf74
parent93d007481e25c9db88e8b16117b0378d51951bb6 (diff)
downloadsircbot-29e3e409a36256cd1bf49c58970ebbeff8151497.tar.bz2
sircbot-29e3e409a36256cd1bf49c58970ebbeff8151497.tar.xz
fix another segfault
user or data might be null
-rw-r--r--sircbot.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sircbot.c b/sircbot.c
index 7d9c1a3..bb965ad 100644
--- a/sircbot.c
+++ b/sircbot.c
@@ -236,21 +236,21 @@ int handle_response(struct sircbot_session *sb, char *user, char *cmd,
char *data)
{
printf("DEBUG: handling response: user=%s, cmd=%s, data=%s\n",
- user, cmd, data);
+ user ? user : "(null)", cmd, data ? data : "(null)");
if (strncmp(cmd, "PING", 4) == 0) {
return irc_send(sb->sess, "PONG", data);
} else if (strncmp(cmd, "PONG", 4) == 0) {
sb->sess->last_pong = time(NULL);
- } else if (strncmp(cmd, "JOIN", 4) == 0 &&
+ } else if (strncmp(cmd, "JOIN", 4) == 0 && user != NULL &&
strncmp(user, sb->sess->nick, strlen(sb->sess->nick)) == 0) {
return join_channel(sb, data);
- } else if (strncmp(cmd, "KICK", 4) == 0) {
+ } else if (strncmp(cmd, "KICK", 4) == 0 && data != NULL) {
char *p = strchr(data, ' ');
if (p)
*p = '\0';
return kick_channel(sb, data);
- } else if (strncmp(cmd, "PRIVMSG", 7) == 0) {
+ } else if (strncmp(cmd, "PRIVMSG", 7) == 0 && data != NULL) {
char *p = strchr(data, ' ');
if (p) {
*p++ = '\0';
@@ -266,6 +266,8 @@ int parse_line(struct sircbot_session *sb, char *line)
{
char *user = NULL, *p, *cmd, *data = NULL;
+ if (line == NULL)
+ return -1;
if (line[0] == ':') {
user = &line[1];
p = strchr(user, ' ');