Просмотр исходного кода

* Port [3537] to 1.2.14
* Fix MODE parsing bug (setting -i+k key ignored key)


svn: 3538

Bryan Drewery 19 лет назад
Родитель
Сommit
89496d13a6
2 измененных файлов с 9 добавлено и 3 удалено
  1. 1 0
      doc/UPDATES
  2. 8 3
      src/mod/irc.mod/mode.c

+ 1 - 0
doc/UPDATES

@@ -59,6 +59,7 @@ Lines prefixed with '-' were disabled before release and are not finished, or ar
 * Added oidentd support. set 'oidentd' on makes bot spoof as BOTNICK.
 * Made 'ident-botnick' variable to decide to send username vs botnick for non-ident.
 * Default servers/servers6/alias list updated ('set -YES var -' to use it)
+* Fix MODE parsing bug
 
 1.2.13 - http://wraith.shatow.net/milestone/1.2.13
 * Fix cmd_chanset accepting invalid flags

+ 8 - 3
src/mod/irc.mod/mode.c

@@ -958,6 +958,7 @@ gotmode(char *from, char *msg)
 {
 #define msign	modes[i][0]
 #define mmode	modes[i][1]
+/* 2 = space */
 #define mparam	&modes[i][3]
   /* Usermode changes? */
   if (msg[0] && (strchr(CHANMETA, msg[0]) != NULL)) {
@@ -1029,14 +1030,18 @@ gotmode(char *from, char *msg)
         if (strchr("+-", *chg))
           sign = *chg;
         else {
-          char* mp = newsplit(&msg);       /* PARAM as noted above */
-          fixcolon(mp);
+          char* mp = NULL;
+
+          if (strchr("beIlkov", chg[0])) {
+            mp = newsplit(&msg);       /* PARAM as noted above */
+            fixcolon(mp);
+          }
 
           /* Just want o's and b's */
           modes = (char **) my_realloc(modes, (modecnt * sizeof(char *)) + sizeof(char *));
 //      char **modes = (char **) my_calloc(modesperline + 1, sizeof(char *));
 
-          size_t siz = strlen(mp) + 3 + 1;
+          size_t siz = (mp ? strlen(mp) : 0) + 3 + 1;
           modes[modecnt] = (char *) my_calloc(1, siz);
           simple_snprintf(modes[modecnt], siz, "%c%c %s", sign, chg[0], mp ? mp : "");
           ++modecnt;