Infinite recursion fix; mod_chanmode_parse() fixes
authorMichael Poole <mdpoole@troilus.org>
Wed, 24 Mar 2004 20:32:16 +0000 (20:32 +0000)
committerMichael Poole <mdpoole@troilus.org>
Wed, 24 Mar 2004 20:32:16 +0000 (20:32 +0000)
* Default lang->parent to lang_C rather than language_find("C"), so
that trying to create language "C" does not cause infinite recursion.

* Fail when we try to parse a mode with an unrecognized mode character
from users; ignore them coming from a server.
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-32

src/helpfile.c
src/proto-bahamut.c
src/proto-p10.c

index b04c7838b28f42355c064ca6aa590cac7e39ff6f..ad8c76c96a0739598837b278bcae5198529e456e 100644 (file)
@@ -64,7 +64,7 @@ static struct language *language_alloc(const char *name)
 {
     struct language *lang = calloc(1, sizeof(*lang));
     lang->name = strdup(name);
-    lang->parent = language_find("C");
+    lang->parent = lang_C;
     if (!languages) {
         languages = dict_new();
         dict_set_free_data(languages, language_free);
index d7ffedf70762faa5bd04e15221447e52b372c877..7b96a42a81019ef6a91a45f34c8332501fcd16b6 100644 (file)
@@ -1266,6 +1266,9 @@ mod_chanmode_parse(struct chanNode *channel, char **modes, unsigned int argc, un
                 ch_arg++;
             break;
         }
+        default:
+            if (!(flags & MCP_FROM_SERVER))
+                goto error;
         }
     }
     change->argc = argc; /* in case any turned out to be ignored */
index 565b828b87d4ff443e4c5517a99fe2a89bdfbf1d..d7de9896797b9e706d867b76186f5a74574f7e74 100644 (file)
@@ -2053,6 +2053,9 @@ mod_chanmode_parse(struct chanNode *channel, char **modes, unsigned int argc, un
                 ch_arg++;
             break;
         }
+        default:
+            if (!(flags & MCP_FROM_SERVER))
+                goto error;
         }
     }
     change->argc = ch_arg; /* in case any turned out to be ignored */