summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2005-01-19 06:21:27 +0000
committerSebastien Helleu <flashcode@flashtux.org>2005-01-19 06:21:27 +0000
commit26af7b49fdf0f90ff8bd02f0652dc4f4662567b5 (patch)
tree633f8e41ff280b7c387e1d757c83c0be2a019e4c /src
parent1ee8e1edb2fe00a7db2bd8d3a154c0b5959288ff (diff)
downloadweechat-26af7b49fdf0f90ff8bd02f0652dc4f4662567b5.zip
Fixed possible crash with "/server del" and "/buffer close" commands
Diffstat (limited to 'src')
-rw-r--r--src/common/command.c26
-rw-r--r--src/irc/irc-server.c2
2 files changed, 26 insertions, 2 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;