]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Valgrind fixes (libstdc++ is broken! :O)
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 26 Feb 2006 22:34:15 +0000 (22:34 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 26 Feb 2006 22:34:15 +0000 (22:34 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3354 e03df62e-2008-0410-955e-edbf42e46eb7

src/mode.cpp
src/modules/m_spanningtree.cpp

index fc2e04b1ed30d93633666deacffae740803d9448..d07675e5f2b0fd17d9b39a3ef08484e697c4945f 100644 (file)
@@ -585,6 +585,8 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
        while (modelist[len-1] == ' ')
                modelist[--len] = '\0';
 
        while (modelist[len-1] == ' ')
                modelist[--len] = '\0';
 
+       bool next_cant_be_modifier = false;
+
        for (char* modechar = modelist; *modechar; ptr++, modechar++)
        {
                r = NULL;
        for (char* modechar = modelist; *modechar; ptr++, modechar++)
        {
                r = NULL;
@@ -595,40 +597,50 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                if (pc > MAXMODES-1)
                        break;
 
                if (pc > MAXMODES-1)
                        break;
 
+               if ((*modechar != '+') && (*modechar != '-'))
+                       next_cant_be_modifier = false;
+
                {
                        switch (*modechar)
                        {
                                case '-':
                {
                        switch (*modechar)
                        {
                                case '-':
-                                       if (mdir != 0)
+                                       if (!next_cant_be_modifier)
                                        {
                                        {
-                                               int t = strlen(outlist)-1;
-                                               if ((outlist[t] == '+') || (outlist[t] == '-'))
-                                               {
-                                                       outlist[t] = '-';
-                                               }
-                                               else
+                                               if (mdir != 0)
                                                {
                                                {
-                                                       strcat(outlist,"-");
+                                                       int t = strlen(outlist)-1;
+                                                       if ((outlist[t] == '+') || (outlist[t] == '-'))
+                                                       {
+                                                               outlist[t] = '-';
+                                                       }
+                                                       else
+                                                       {
+                                                               strcat(outlist,"-");
+                                                       }
                                                }
                                                }
+                                               mdir = 0;
+                                               next_cant_be_modifier = true;
                                        }
                                        }
-                                       mdir = 0;
-                                       
                                break;                  
 
                                case '+':
                                break;                  
 
                                case '+':
-                                       if (mdir != 1)
+                                       if (!next_cant_be_modifier)
                                        {
                                        {
-                                               int t = strlen(outlist)-1;
-                                               if ((outlist[t] == '+') || (outlist[t] == '-'))
+                                               if (mdir != 1)
                                                {
                                                {
-                                                       outlist[t] = '+';
-                                               }
-                                               else
-                                               {
-                                                       strcat(outlist,"+");
+                                                       int t = strlen(outlist)-1;
+                                                       if ((outlist[t] == '+') || (outlist[t] == '-'))
+                                                       {
+                                                               outlist[t] = '+';
+                                                       }
+                                                       else
+                                                       {
+                                                               strcat(outlist,"+");
+                                                       }
                                                }
                                                }
+                                               mdir = 1;
+                                               next_cant_be_modifier = true;
                                        }
                                        }
-                                       mdir = 1;
                                break;
 
                                case 'o':
                                break;
 
                                case 'o':
@@ -1113,13 +1125,14 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
        }
 
        /* this ensures only the *valid* modes are sent out onto the network */
        }
 
        /* this ensures only the *valid* modes are sent out onto the network */
-       int xt = strlen(outlist)-1;
+       /*int xt = strlen(outlist)-1;
        while ((outlist[xt] == '-') || (outlist[xt] == '+'))
        {
                outlist[xt] = '\0';
                xt = strlen(outlist)-1;
        while ((outlist[xt] == '-') || (outlist[xt] == '+'))
        {
                outlist[xt] = '\0';
                xt = strlen(outlist)-1;
-       }
-       if (outlist[0])
+       }*/
+       /* The mode change must be at least two characters long (+ or - and at least one mode) */
+       if (((*outlist == '+') || (*outlist == '-')) && *(outlist+1))
        {
                strlcpy(outstr,outlist,MAXBUF);
                for (ptr = 0; ptr < pc; ptr++)
        {
                strlcpy(outstr,outlist,MAXBUF);
                for (ptr = 0; ptr < pc; ptr++)
index 7086ce1da66712f961b39c5d83a844ebc11d3774..ccc5cd6dce5bd411180e4682f7fca36d17fc0a10 100644 (file)
@@ -864,13 +864,14 @@ class TreeSocket : public InspSocket
        }
 
        /* FMODE command */
        }
 
        /* FMODE command */
-       bool ForceMode(std::string source, std::deque<std::string> params)
+       bool ForceMode(std::string source, std::deque<std::string> &params)
        {
        {
-               userrec* who = new userrec;
-               who->fd = FD_MAGIC_NUMBER;
                if (params.size() < 2)
                        return true;
                if (params.size() < 2)
                        return true;
-               char* modelist[255];
+               userrec* who = new userrec();
+               who->fd = FD_MAGIC_NUMBER;
+               char* modelist[64];
+               memset(&modelist,0,sizeof(modelist));
                for (unsigned int q = 0; q < params.size(); q++)
                {
                        modelist[q] = (char*)params[q].c_str();
                for (unsigned int q = 0; q < params.size(); q++)
                {
                        modelist[q] = (char*)params[q].c_str();
@@ -882,7 +883,7 @@ class TreeSocket : public InspSocket
        }
 
        /* FTOPIC command */
        }
 
        /* FTOPIC command */
-       bool ForceTopic(std::string source, std::deque<std::string> params)
+       bool ForceTopic(std::string source, std::deque<std::string> &params)
        {
                if (params.size() != 4)
                        return true;
        {
                if (params.size() != 4)
                        return true;
@@ -927,7 +928,7 @@ class TreeSocket : public InspSocket
        }
 
        /* FJOIN, similar to unreal SJOIN */
        }
 
        /* FJOIN, similar to unreal SJOIN */
-       bool ForceJoin(std::string source, std::deque<std::string> params)
+       bool ForceJoin(std::string source, std::deque<std::string> &params)
        {
                if (params.size() < 3)
                        return true;
        {
                if (params.size() < 3)
                        return true;
@@ -935,6 +936,7 @@ class TreeSocket : public InspSocket
                char first[MAXBUF];
                char modestring[MAXBUF];
                char* mode_users[127];
                char first[MAXBUF];
                char modestring[MAXBUF];
                char* mode_users[127];
+               memset(&mode_users,0,sizeof(mode_users));
                mode_users[0] = first;
                mode_users[1] = modestring;
                strcpy(mode_users[1],"+");
                mode_users[0] = first;
                mode_users[1] = modestring;
                strcpy(mode_users[1],"+");
@@ -1057,7 +1059,7 @@ class TreeSocket : public InspSocket
        }
 
        /* NICK command */
        }
 
        /* NICK command */
-       bool IntroduceClient(std::string source, std::deque<std::string> params)
+       bool IntroduceClient(std::string source, std::deque<std::string> &params)
        {
                if (params.size() < 8)
                        return true;
        {
                if (params.size() < 8)
                        return true;
@@ -1203,7 +1205,8 @@ class TreeSocket : public InspSocket
        void SendXLines(TreeServer* Current)
        {
                char data[MAXBUF];
        void SendXLines(TreeServer* Current)
        {
                char data[MAXBUF];
-               const char* sn = Srv->GetServerName().c_str();
+               std::string n = Srv->GetServerName();
+               const char* sn = n.c_str();
                int iterations = 0;
                /* Yes, these arent too nice looking, but they get the job done */
                for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++, iterations++)
                int iterations = 0;
                /* Yes, these arent too nice looking, but they get the job done */
                for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++, iterations++)
@@ -1286,7 +1289,8 @@ class TreeSocket : public InspSocket
                char data[MAXBUF];
                std::deque<std::string> list;
                int iterations = 0;
                char data[MAXBUF];
                std::deque<std::string> list;
                int iterations = 0;
-               const char* sn = Srv->GetServerName().c_str();
+               std::string n = Srv->GetServerName();
+               const char* sn = n.c_str();
                for (chan_hash::iterator c = chanlist.begin(); c != chanlist.end(); c++, iterations++)
                {
                        SendFJoins(Current, c->second);
                for (chan_hash::iterator c = chanlist.begin(); c != chanlist.end(); c++, iterations++)
                {
                        SendFJoins(Current, c->second);