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 /src/common | |
parent | 1ee8e1edb2fe00a7db2bd8d3a154c0b5959288ff (diff) | |
download | weechat-26af7b49fdf0f90ff8bd02f0652dc4f4662567b5.zip |
Fixed possible crash with "/server del" and "/buffer close" commands
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/command.c | 26 |
1 files changed, 25 insertions, 1 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")); |