]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/mode.cpp
Decide that it wasn't quite appropriate :(
[user/henk/code/inspircd.git] / src / mode.cpp
index 7909aad38cacea8cc8a5deef679443c056c005ad..40ef66f0db76e75bb9a146cf0b5a3e3e0363aeec 100644 (file)
@@ -453,11 +453,11 @@ char* ModeParser::AddBan(userrec *user,char *dest,chanrec *chan,int status)
        strlcpy(b.data,dest,MAXBUF);
        if (*user->nick)
        {
-               strlcpy(b.set_by,user->nick,NICKMAX);
+               strlcpy(b.set_by,user->nick,NICKMAX-1);
        }
        else
        {
-               strlcpy(b.set_by,Srv->GetServerName().c_str(),NICKMAX);
+               strlcpy(b.set_by,Config->ServerName,NICKMAX-1);
        }
        chan->bans.push_back(b);
        return dest;
@@ -589,6 +589,12 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
        {
                r = NULL;
 
+               /* If we have more than MAXMODES changes in one line,
+                * drop all after the MAXMODES
+                */
+               if (pc > MAXMODES-1)
+                       break;
+
                {
                        switch (*modechar)
                        {
@@ -629,6 +635,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                                        log(DEBUG,"Ops");
                                        if ((param >= pcnt)) break;
                                        log(DEBUG,"Enough parameters left");
+                                       r = NULL;
                                        if (mdir == 1)
                                        {
                                                MOD_RESULT = 0;
@@ -660,6 +667,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                        
                                case 'h':
                                        if (((param >= pcnt)) || (!Config->AllowHalfop)) break;
+                                       r = NULL;
                                        if (mdir == 1)
                                        {
                                                 MOD_RESULT = 0;
@@ -690,6 +698,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                                
                                case 'v':
                                        if ((param >= pcnt)) break;
+                                       r = NULL;
                                        if (mdir == 1)
                                        {
                                                 MOD_RESULT = 0;
@@ -719,6 +728,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                                
                                case 'b':
                                        if ((param >= pcnt)) break;
+                                       r = NULL;
                                        if (mdir == 1)
                                        {
                                                 MOD_RESULT = 0;
@@ -1205,7 +1215,7 @@ bool ModeParser::ProcessModuleUmode(char umode, userrec* source, void* dest, boo
        if (!source)
        {
                s2 = new userrec;
-               strlcpy(s2->nick,Config->ServerName,NICKMAX);
+               strlcpy(s2->nick,Config->ServerName,NICKMAX-1);
                strlcpy(s2->modes,"o",52);
                s2->fd = -1;
                source = s2;