# arch-tag: automatic-ChangeLog--srvx@srvx.net--2005-srvx/srvx--devo--1.3
#
+2005-02-08 04:42:43 GMT Michael Poole <mdpoole@troilus.org> patch-16
+
+ Summary:
+ Fix memory corruption when removing certain bans from a channel.
+ Revision:
+ srvx--devo--1.3--patch-16
+
+ src/proto-common.c (mod_chanmode_apply): Make sure we get a pointer to
+ the ban we want to deallocate BEFORE we remove it from the banlist.
+
+ modified files:
+ ChangeLog src/proto-common.c
+
+
2005-02-05 13:03:21 GMT Michael Poole <mdpoole@troilus.org> patch-15
Summary:
* to be more specific than an existing ban.
*/
for (jj=0; jj<channel->banlist.used; ++jj) {
- if (match_ircglobs(change->args[ii].u.hostmask, channel->banlist.list[jj]->ban)) {
- banList_remove(&channel->banlist, channel->banlist.list[jj]);
- free(channel->banlist.list[jj]);
+ bn = channel->banlist.list[jj];
+ if (match_ircglobs(change->args[ii].u.hostmask, bn->ban)) {
+ banList_remove(&channel->banlist, bn);
+ free(bn);
jj--;
}
}
break;
case MODE_REMOVE|MODE_BAN:
for (jj=0; jj<channel->banlist.used; ++jj) {
- if (strcmp(channel->banlist.list[jj]->ban, change->args[ii].u.hostmask))
+ bn = channel->banlist.list[jj];
+ if (strcmp(bn->ban, change->args[ii].u.hostmask))
continue;
- free(channel->banlist.list[jj]);
- banList_remove(&channel->banlist, channel->banlist.list[jj]);
+ free(bn);
+ banList_remove(&channel->banlist, bn);
break;
}
break;