]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Fixed problem where you could set silly limits via CHANMODE which caused desync.
authorsplidge <redacted>
Sat, 15 Mar 2008 12:34:25 +0000 (12:34 +0000)
committersplidge <redacted>
Sat, 15 Mar 2008 12:34:25 +0000 (12:34 +0000)
chanserv/chancmds/chanmode.c
chanserv/chanserv.h

index 14b41d22a211c65cd4edf1f830fb5c5c0b9180fb..a2bd5ac7402af1039754b634e551314ee0022465 100644 (file)
@@ -79,7 +79,7 @@ int csc_dochanmode(void *source, int cargc, char **cargv) {
   char buf1[60];
   int carg=2,limdone=0;
   sstring *newkey=NULL;
-  unsigned int newlim=0;
+  int newlim=0;
 
   if (cargc<1) {
     chanservstdmessage(sender,QM_NOTENOUGHPARAMS,"chanmode");
@@ -150,6 +150,9 @@ int csc_dochanmode(void *source, int cargc, char **cargv) {
       forceflags |= CHANMODE_LIMIT;
       denyflags &= ~CHANMODE_LIMIT;
       newlim=rcp->limit;
+    } else if ((forceflags & CHANMODE_LIMIT) && (newlim <= 0 || newlim >= 65535)) {
+      newlim=0;
+      forceflags &= ~CHANMODE_LIMIT;
     }
 
     /* It parsed OK, so update the structure.. */
index 937dca328b06de3e5306c16675510d7ec779dd31..693f0643b7f92d4b73eeb2ca4af74d6a2788762a 100644 (file)
@@ -448,7 +448,7 @@ typedef struct regchan {
   flag_t              forcemodes;      /* Forced modes */
   flag_t              denymodes;       /* Denied modes */
 
-  short               limit;           /* Limit to enforce if +l is set */
+  unsigned short      limit;           /* Limit to enforce if +l is set */
   short               autolimit;       /* How many slots to leave when autolimiting */
   short               banstyle;        /* Ban style for +b type bans */