+2004-09-11 Kevin L Mitchell <klmitch@mit.edu>
+
+ * ircd/channel.c: removing limits shouldn't gobble an argument;
+ this was a subtle interaction issue with modebuf...fixed by adding
+ MODE_LIMIT to modebuf_flush_int() and short-circuiting
+ modebuf_mode_uint() to add MODE_LIMIT to mbuf->mb_rem in the
+ removal case. Note that this is not proof against the sequence,
+ "modebuf_mode_uint(mbuf, MODE_ADD | MODE_LIMIT, 10);
+ modebuf_mode_uint(mbuf, MODE_DEL | MODE_LIMIT, 10);"
+ (Bug #916138)
+
2004-09-11 Michael Poole <mdpoole@troilus.org>
* include/supported.h: Kev pointed out I misinterpreted the
MODE_WASDELJOINS, 'd',
/* MODE_KEY, 'k', */
/* MODE_BAN, 'b', */
-/* MODE_LIMIT, 'l', */
+ MODE_LIMIT, 'l',
/* MODE_APASS, 'A', */
/* MODE_UPASS, 'u', */
0x0, 0x0
assert(0 != mbuf);
assert(0 != (mode & (MODE_ADD | MODE_DEL)));
+ if (mode == (MODE_LIMIT | MODE_DEL)) {
+ mbuf->mb_rem |= mode;
+ return;
+ }
MB_TYPE(mbuf, mbuf->mb_count) = mode;
MB_UINT(mbuf, mbuf->mb_count) = uint;