mirror of
https://github.com/weechat/weechat.git
synced 2026-06-27 21:36:37 +02:00
Fixed possible crash with "/server del" and "/buffer close" commands
This commit is contained in:
+25
-1
@@ -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"));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"));
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user