1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 04:46:37 +02:00

irc: allocate the string "prefix" in nick

This fixes a crash when calling the function hdata_string on the "prefix"
variable in the nick.
This commit is contained in:
Sébastien Helleu
2018-04-02 09:58:08 +02:00
parent a6d7179462
commit 3ce882daee
2 changed files with 10 additions and 8 deletions
+8 -6
View File
@@ -490,7 +490,8 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel,
new_nick->realname = (realname) ? strdup (realname) : NULL;
length = strlen (irc_server_get_prefix_chars (server));
new_nick->prefixes = malloc (length + 1);
if (!new_nick->name || !new_nick->prefixes)
new_nick->prefix = malloc (2);
if (!new_nick->name || !new_nick->prefixes || !new_nick->prefix)
{
if (new_nick->name)
free (new_nick->name);
@@ -502,14 +503,13 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel,
free (new_nick->realname);
if (new_nick->prefixes)
free (new_nick->prefixes);
if (new_nick->prefix)
free (new_nick->prefix);
free (new_nick);
return NULL;
}
if (new_nick->prefixes)
{
memset (new_nick->prefixes, ' ', length);
new_nick->prefixes[length] = '\0';
}
memset (new_nick->prefixes, ' ', length);
new_nick->prefixes[length] = '\0';
new_nick->prefix[0] = ' ';
new_nick->prefix[1] = '\0';
irc_nick_set_prefixes (server, new_nick, prefixes);
@@ -640,6 +640,8 @@ irc_nick_free (struct t_irc_server *server, struct t_irc_channel *channel,
free (nick->host);
if (nick->prefixes)
free (nick->prefixes);
if (nick->prefix)
free (nick->prefix);
if (nick->account)
free (nick->account);
if (nick->realname)
+2 -2
View File
@@ -35,8 +35,8 @@ struct t_irc_nick
char *name; /* nickname */
char *host; /* full hostname */
char *prefixes; /* string with prefixes enabled for nick */
char prefix[2]; /* current prefix (higher prefix set in */
/* prefixes) */
char *prefix; /* current prefix (higher prefix set in */
/* prefixes); string with just one char */
int away; /* 1 if nick is away */
char *account; /* account name of the user */
char *realname; /* realname (aka gecos) of the user */