From: brain Date: Thu, 2 Mar 2006 12:52:45 +0000 (+0000) Subject: Experimental improvements to TreeSocket::Split X-Git-Tag: v2.0.23~8674 X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=5bacd1de02febe004182e845d1179ac0cc631ea9;hp=4c6fb8032bf8a6310080069cc65c975087d93a76;p=user%2Fhenk%2Fcode%2Finspircd.git Experimental improvements to TreeSocket::Split git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3418 e03df62e-2008-0410-955e-edbf42e46eb7 --- diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp index f927ac044..ce3d00b8c 100644 --- a/src/modules/m_spanningtree.cpp +++ b/src/modules/m_spanningtree.cpp @@ -2072,13 +2072,18 @@ class TreeSocket : public InspSocket void Split(std::string line, bool stripcolon, std::deque &n) { + // we don't do anything with a line > 2048 + if (line.length() > 2048) + return; if (!strchr(line.c_str(),' ')) { n.push_back(line); return; } std::stringstream s(line); - std::string param = ""; + int count = 0; + char param[1024]; + char* pptr = param; n.clear(); int item = 0; @@ -2089,32 +2094,34 @@ class TreeSocket : public InspSocket if (c == ' ') { n.push_back(param); - param = ""; + *param = count = 0; item++; } else { if (!s.eof()) { - param = param + c; + *pptr++ = c; + count++; } - if ((param == ":") && (item > 0)) + if ((*param == ':') && (count == 1) && (item > 0)) { - param = ""; + *param = 0; while (!s.eof()) { s.get(c); if (!s.eof()) { - param = param + c; + *pptr++ = c; + count++; } } n.push_back(param); - param = ""; + *param = count = 0; } } } - if (param != "") + if (*param) { n.push_back(param); }