diff options
author | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2018-01-25 15:33:24 +0100 |
---|---|---|
committer | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2018-02-09 13:02:00 +0100 |
commit | 5c5ed64180a6b76315ee7b8c6000ee64ad5877a7 (patch) | |
tree | 53cd1c09645be36e148e898d51be3ff89d78a7f0 /src/fe-common/irc/fe-netjoin.c | |
parent | 946876b1e9db5d764cecb3f884fc3075765dc94d (diff) | |
download | irssi-5c5ed64180a6b76315ee7b8c6000ee64ad5877a7.zip |
try to make sure the server is still good enough to call ischannel when printing netsplit/join
Diffstat (limited to 'src/fe-common/irc/fe-netjoin.c')
-rw-r--r-- | src/fe-common/irc/fe-netjoin.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/fe-common/irc/fe-netjoin.c b/src/fe-common/irc/fe-netjoin.c index a7a2e4fe..9ea633b4 100644 --- a/src/fe-common/irc/fe-netjoin.c +++ b/src/fe-common/irc/fe-netjoin.c @@ -245,17 +245,24 @@ static void print_netjoins(NETJOIN_SERVER_REC *server, const char *filter_channe message before it. */ static void sig_print_starting(TEXT_DEST_REC *dest) { - GSList *tmp, *next; + NETJOIN_SERVER_REC *rec; if (printing_joins) return; - for (tmp = joinservers; tmp != NULL; tmp = next) { - NETJOIN_SERVER_REC *server = tmp->data; + if (!IS_IRC_SERVER(dest->server)) + return; - next = tmp->next; - if (server->netjoins != NULL) - print_netjoins(server, NULL); + rec = netjoin_find_server(IRC_SERVER(dest->server)); + if (rec != NULL && rec->netjoins != NULL) { + /* if netjoins exists, the server rec should be + still valid. otherwise, calling server->ischannel + may not be safe. */ + if (dest->target != NULL && + !server_ischannel((SERVER_REC *) rec->server, dest->target)) + return; + + print_netjoins(rec, NULL); } } |