diff options
| author | dequis <dx@dxzone.com.ar> | 2016-01-26 12:22:45 -0300 | 
|---|---|---|
| committer | dequis <dx@dxzone.com.ar> | 2016-01-26 12:53:56 -0300 | 
| commit | 7616eec826025932d1a2a62fc6f71887995046e0 (patch) | |
| tree | 084b62c46f53eebc01cea64a0844d5b8441bc73e /root_commands.c | |
| parent | eee7294a4c798b04913d15df590f205b6c049281 (diff) | |
root_commands: Fix use-after-free after doing "transfer reject"
Not a big deal because as far as I can see not much happens between the
g_slist_remove() in dcc_close() and accessing files->next. I'd expect
that pointer to remain null after being freed most of the time.
Diffstat (limited to 'root_commands.c')
| -rw-r--r-- | root_commands.c | 4 | 
1 files changed, 3 insertions, 1 deletions
| diff --git a/root_commands.c b/root_commands.c index e6ed1602..4ce964ae 100644 --- a/root_commands.c +++ b/root_commands.c @@ -1237,6 +1237,7 @@ static void cmd_group(irc_t *irc, char **cmd)  static void cmd_transfer(irc_t *irc, char **cmd)  {  	GSList *files = irc->file_transfers; +	GSList *next;  	enum { LIST, REJECT, CANCEL };  	int subcmd = LIST; @@ -1254,7 +1255,8 @@ static void cmd_transfer(irc_t *irc, char **cmd)  		subcmd = CANCEL;  	} -	for (; files; files = g_slist_next(files)) { +	for (; files; files = next) { +		next = files->next;  		file_transfer_t *file = files->data;  		switch (subcmd) { | 
