diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2005-01-19 06:21:27 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2005-01-19 06:21:27 +0000 |
commit | 26af7b49fdf0f90ff8bd02f0652dc4f4662567b5 (patch) | |
tree | 633f8e41ff280b7c387e1d757c83c0be2a019e4c | |
parent | 1ee8e1edb2fe00a7db2bd8d3a154c0b5959288ff (diff) | |
download | weechat-26af7b49fdf0f90ff8bd02f0652dc4f4662567b5.zip |
Fixed possible crash with "/server del" and "/buffer close" commands
-rw-r--r-- | src/common/command.c | 26 | ||||
-rw-r--r-- | src/irc/irc-server.c | 2 | ||||
-rw-r--r-- | weechat/src/common/command.c | 26 | ||||
-rw-r--r-- | weechat/src/irc/irc-server.c | 2 |
4 files changed, 52 insertions, 4 deletions
diff --git a/src/common/command.c b/src/common/command.c index 547657965..29e600112 100644 --- a/src/common/command.c +++ b/src/common/command.c @@ -886,7 +886,12 @@ weechat_cmd_buffer (int argc, char **argv) ptr_server->buffer = NULL; } else - irc_cmd_send_part (SERVER(gui_current_window->buffer), NULL); + { + if (SERVER(gui_current_window->buffer)) + irc_cmd_send_part (SERVER(gui_current_window->buffer), NULL); + else + gui_buffer_free (gui_current_window->buffer, 1); + } } else if (strcasecmp (argv[0], "notify") == 0) { @@ -1337,6 +1342,7 @@ weechat_cmd_server (int argc, char **argv) { int i; t_irc_server server, *ptr_server, *server_found, *new_server; + t_gui_buffer *ptr_buffer; if ((argc == 0) || (argc == 1)) { @@ -1408,6 +1414,24 @@ weechat_cmd_server (int argc, char **argv) WEECHAT_ERROR, argv[1], "server del"); return -1; } + if (server_found->is_connected) + { + irc_display_prefix (NULL, PREFIX_ERROR); + gui_printf (NULL, + _("%s you can not delete server \"%s\" because you are connected to. " + "Try /disconnect %s before.\n"), + WEECHAT_ERROR, argv[1], argv[1]); + return -1; + } + + for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) + { + if (SERVER(ptr_buffer) == server_found) + { + ptr_buffer->server = NULL; + ptr_buffer->channel = NULL; + } + } irc_display_prefix (NULL, PREFIX_INFO); gui_printf_color (NULL, COLOR_WIN_CHAT, _("Server")); diff --git a/src/irc/irc-server.c b/src/irc/irc-server.c index 6ad7ea13d..b3afa302f 100644 --- a/src/irc/irc-server.c +++ b/src/irc/irc-server.c @@ -60,7 +60,7 @@ void server_init (t_irc_server *server) { server->name = NULL; - server->autoconnect = 1; + server->autoconnect = 0; server->autoreconnect = 1; server->autoreconnect_delay = 30; server->command_line = 0; diff --git a/weechat/src/common/command.c b/weechat/src/common/command.c index 547657965..29e600112 100644 --- a/weechat/src/common/command.c +++ b/weechat/src/common/command.c @@ -886,7 +886,12 @@ weechat_cmd_buffer (int argc, char **argv) ptr_server->buffer = NULL; } else - irc_cmd_send_part (SERVER(gui_current_window->buffer), NULL); + { + if (SERVER(gui_current_window->buffer)) + irc_cmd_send_part (SERVER(gui_current_window->buffer), NULL); + else + gui_buffer_free (gui_current_window->buffer, 1); + } } else if (strcasecmp (argv[0], "notify") == 0) { @@ -1337,6 +1342,7 @@ weechat_cmd_server (int argc, char **argv) { int i; t_irc_server server, *ptr_server, *server_found, *new_server; + t_gui_buffer *ptr_buffer; if ((argc == 0) || (argc == 1)) { @@ -1408,6 +1414,24 @@ weechat_cmd_server (int argc, char **argv) WEECHAT_ERROR, argv[1], "server del"); return -1; } + if (server_found->is_connected) + { + irc_display_prefix (NULL, PREFIX_ERROR); + gui_printf (NULL, + _("%s you can not delete server \"%s\" because you are connected to. " + "Try /disconnect %s before.\n"), + WEECHAT_ERROR, argv[1], argv[1]); + return -1; + } + + for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) + { + if (SERVER(ptr_buffer) == server_found) + { + ptr_buffer->server = NULL; + ptr_buffer->channel = NULL; + } + } irc_display_prefix (NULL, PREFIX_INFO); gui_printf_color (NULL, COLOR_WIN_CHAT, _("Server")); diff --git a/weechat/src/irc/irc-server.c b/weechat/src/irc/irc-server.c index 6ad7ea13d..b3afa302f 100644 --- a/weechat/src/irc/irc-server.c +++ b/weechat/src/irc/irc-server.c @@ -60,7 +60,7 @@ void server_init (t_irc_server *server) { server->name = NULL; - server->autoconnect = 1; + server->autoconnect = 0; server->autoreconnect = 1; server->autoreconnect_delay = 30; server->command_line = 0; |