fix channel mode bouncing bugs
authorEntrope <entrope@clan-dk.org>
Fri, 12 Mar 2004 00:27:29 +0000 (00:27 +0000)
committerEntrope <entrope@clan-dk.org>
Fri, 12 Mar 2004 00:27:29 +0000 (00:27 +0000)
* Make mod_chanmode_dup() copy the limit and key like one might expect.

* Make ChanServ's handle_mode() copy the default modes using
mod_chanmode_dup() instead of an implicit memcpy.
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-28

src/chanserv.c
src/proto-common.c

index 5cc98b41aadf9e68933d2a6dbf8e1f2fcf650418..c6137c85d55ddb74438c31fc256e24d1949343c7 100644 (file)
@@ -6030,8 +6030,7 @@ handle_mode(struct chanNode *channel, struct userNode *user, const struct mod_ch
        && mode_lock_violated(&channel->channel_info->modes, change))
     {
         char correct[MAXLEN];
-        bounce = mod_chanmode_alloc(change->argc + 1);
-        *bounce = channel->channel_info->modes;
+        bounce = mod_chanmode_dup(&channel->channel_info->modes, change->argc + 1);
         mod_chanmode_format(&channel->channel_info->modes, correct);
         send_message(user, chanserv, "CSMSG_MODE_LOCKED", correct, channel->name);
     }
index 1f7b1cbbab100bc708716351044f63522443cbba..c558af1c2b2fb3ad29a1d3e121d0275422f0341a 100644 (file)
@@ -536,6 +536,8 @@ mod_chanmode_dup(struct mod_chanmode *orig, unsigned int extra)
     if (res) {
         res->modes_set = orig->modes_set;
         res->modes_clear = orig->modes_clear;
+        res->new_limit = orig->new_limit;
+        memcpy(res->new_key, orig->new_key, sizeof(res->new_key));
         res->argc = orig->argc;
         memcpy(res->args, orig->args, orig->argc*sizeof(orig->args[0]));
     }