diff options
-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, ' '); |