From 5bacd1de02febe004182e845d1179ac0cc631ea9 Mon Sep 17 00:00:00 2001 From: brain Date: Thu, 2 Mar 2006 12:52:45 +0000 Subject: Experimental improvements to TreeSocket::Split git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3418 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_spanningtree.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) 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); } -- cgit v1.2.3