diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2013-03-08 11:28:15 +0100 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2013-03-08 11:28:15 +0100 |
commit | 29e3e409a36256cd1bf49c58970ebbeff8151497 (patch) | |
tree | 50ab6b00f3b28924c390212732d436bcef89bf74 | |
parent | 93d007481e25c9db88e8b16117b0378d51951bb6 (diff) | |
download | sircbot-29e3e409a36256cd1bf49c58970ebbeff8151497.tar.bz2 sircbot-29e3e409a36256cd1bf49c58970ebbeff8151497.tar.xz |
fix another segfault
user or data might be null
-rw-r--r-- | sircbot.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -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, ' '); |