mirror of
https://github.com/weechat/weechat.git
synced 2026-07-09 03:03:12 +02:00
Secured code to prevent buffer overflows and memory leaks
This commit is contained in:
+19
-11
@@ -183,7 +183,7 @@ irc_cmd_recv_join (t_irc_server *server, char *host, char *arguments)
|
||||
_(" has joined "));
|
||||
gui_printf_color (ptr_channel->window, COLOR_WIN_CHAT_CHANNEL,
|
||||
"%s\n", arguments);
|
||||
nick_new (ptr_channel, host, 0, 0, 0);
|
||||
(void) nick_new (ptr_channel, host, 0, 0, 0);
|
||||
gui_redraw_window_nick (gui_current_window);
|
||||
return 0;
|
||||
}
|
||||
@@ -487,7 +487,7 @@ irc_cmd_recv_nick (t_irc_server *server, char *host, char *arguments)
|
||||
ptr_nick = nick_search (ptr_channel, host);
|
||||
if (ptr_nick)
|
||||
{
|
||||
nick_is_me = (strcmp (ptr_nick->nick, server->nick) == 0);
|
||||
nick_is_me = (strcmp (ptr_nick->nick, server->nick) == 0) ? 1 : 0;
|
||||
nick_change (ptr_channel, ptr_nick, arguments);
|
||||
irc_display_prefix (ptr_channel->window, PREFIX_INFO);
|
||||
if (nick_is_me)
|
||||
@@ -867,15 +867,23 @@ irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments)
|
||||
if (strcmp (pos, "\01VERSION\01") == 0)
|
||||
{
|
||||
buf = (struct utsname *) malloc (sizeof (struct utsname));
|
||||
uname (buf);
|
||||
server_sendf (server,
|
||||
_("NOTICE %s :%sVERSION %s v%s"
|
||||
" compiled on %s, host \"%s\" is running "
|
||||
"%s %s / %s%s"),
|
||||
host, "\01", PACKAGE_NAME, PACKAGE_VERSION, __DATE__,
|
||||
&buf->nodename, &buf->sysname,
|
||||
&buf->release, &buf->machine, "\01\r\n");
|
||||
free (buf);
|
||||
if (buf && (uname (buf) == 0))
|
||||
{
|
||||
server_sendf (server,
|
||||
_("NOTICE %s :%sVERSION %s v%s"
|
||||
" compiled on %s, host \"%s\" is running "
|
||||
"%s %s / %s%s"),
|
||||
host, "\01", PACKAGE_NAME, PACKAGE_VERSION, __DATE__,
|
||||
&buf->nodename, &buf->sysname,
|
||||
&buf->release, &buf->machine, "\01\r\n");
|
||||
free (buf);
|
||||
}
|
||||
else
|
||||
server_sendf (server,
|
||||
_("NOTICE %s :%sVERSION %s v%s"
|
||||
" compiled on %s%s"),
|
||||
host, "\01", PACKAGE_NAME, PACKAGE_VERSION, __DATE__,
|
||||
"\01\r\n");
|
||||
irc_display_prefix (server->window, PREFIX_INFO);
|
||||
gui_printf_color (server->window,
|
||||
COLOR_WIN_CHAT, _("Received a "));
|
||||
|
||||
@@ -318,7 +318,7 @@ server_send (t_irc_server * server, char *buffer, int size_buf)
|
||||
* server_sendf: send formatted data to irc server
|
||||
*/
|
||||
|
||||
int
|
||||
void
|
||||
server_sendf (t_irc_server * server, char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
@@ -326,14 +326,14 @@ server_sendf (t_irc_server * server, char *fmt, ...)
|
||||
int size_buf;
|
||||
|
||||
if (!server)
|
||||
return -1;
|
||||
return;
|
||||
|
||||
va_start (args, fmt);
|
||||
size_buf = vsnprintf (buffer, sizeof (buffer) - 1, fmt, args);
|
||||
va_end (args);
|
||||
|
||||
if ((size_buf == 0) || (strcmp (buffer, "\r\n") == 0))
|
||||
return 0;
|
||||
return;
|
||||
|
||||
buffer[sizeof (buffer) - 1] = '\0';
|
||||
if ((size_buf < 0) || (size_buf > (int) (sizeof (buffer) - 1)))
|
||||
@@ -343,7 +343,9 @@ server_sendf (t_irc_server * server, char *fmt, ...)
|
||||
gui_printf (server->window, "[DEBUG] Sending to server >>> %s\n", buffer);
|
||||
#endif
|
||||
buffer[size_buf - 2] = '\r';
|
||||
return server_send (server, buffer, size_buf);
|
||||
if (server_send (server, buffer, size_buf) <= 0)
|
||||
gui_printf (server->window, _("%s error sending data to IRC server\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+2
-2
@@ -151,7 +151,7 @@ extern void server_free_all ();
|
||||
extern t_irc_server *server_new (char *, int, int, char *, int, char *, char *,
|
||||
char *, char *, char *, char *, char *, char *);
|
||||
extern int server_send (t_irc_server *, char *, int);
|
||||
extern int server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_recv (t_irc_server *);
|
||||
extern int server_connect ();
|
||||
extern void server_auto_connect (int);
|
||||
@@ -182,7 +182,7 @@ extern int nick_get_max_length (t_irc_channel *);
|
||||
|
||||
/* IRC display (irc-diplay.c) */
|
||||
|
||||
extern void irc_display_prefix (t_gui_window *, char *);
|
||||
extern void irc_display_prefix (/*@null@*/ t_gui_window *, char *);
|
||||
extern void irc_display_nick (t_gui_window *, t_irc_nick *, int, int, int, int);
|
||||
extern void irc_display_mode (t_gui_window *, char *, char, char *, char *,
|
||||
char *, char *);
|
||||
|
||||
Reference in New Issue
Block a user