Fix handling of channel mode sequence with/without arguments
authorAlexander Barton <alex@barton.de>
Fri, 6 Jan 2012 16:24:55 +0000 (17:24 +0100)
committerAlexander Barton <alex@barton.de>
Fri, 6 Jan 2012 16:24:55 +0000 (17:24 +0100)
For example, don't generate wrong error messages when handling
"MODE #chan +IIIIItn *!aa@b *!bb@c *!cc@d *!dd@e *!ee@f".

src/ngircd/irc-mode.c

index d8329b1655e2a5f66b88277dd5a0274d86b09ab7..01f87621a6d670df9b7973528d3892b3672caee4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -280,7 +280,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
 
        /* Are there changed modes? */
        if (the_modes[1]) {
-               /* Remoce needless action modifier characters */
+               /* Remove needless action modifier characters */
                len = strlen(the_modes) - 1;
                if (the_modes[len] == '+' || the_modes[len] == '-')
                        the_modes[len] = '\0';
@@ -428,6 +428,8 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                        mode_ptr++;
                if (!*mode_ptr) {
                        /* Try next argument if there's any */
+                       if (arg_arg < 0)
+                               break;
                        if (arg_arg > mode_arg)
                                mode_arg = arg_arg;
                        else