diff options
-rw-r--r-- | src/inspircd.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/inspircd.cpp b/src/inspircd.cpp index cb702245c..369c1f4c4 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -4068,8 +4068,6 @@ int InspIRCd(void) result = read(count2a->second->fd, data, 65535); if (result) { - if (result > 0) - data[result] = '\0'; // perform a check on the raw buffer as an array (not a string!) to remove // characters 0 and 7 which are illegal in the RFC - replace them with spaces. // hopefully this should stop even more people whining about "Unknown command: *" @@ -4078,11 +4076,26 @@ int InspIRCd(void) if ((data[checker] == 0) || (data[checker] == 7)) data[checker] = ' '; } + if (result > 0) + data[result] = '\0'; userrec* current = count2a->second; int currfd = current->fd; - //char* l = strtok(data,"\n"); int floodlines = 0; current->AddBuffer(data); + if (current->recvq.length() > NetBufferSize) + { + if (current->registered == 7) + { + kill_link(current,"RecvQ exceeded"); + goto label; + } + else + { + add_zline(120,ServerName,"Flood from unregistered connection",current->ip); + apply_lines(); + goto label; + } + } // while there are complete lines to process... while (current->BufferIsReady()) { @@ -4094,19 +4107,15 @@ int InspIRCd(void) kill_link(current,"Excess flood"); goto label; } - char sanitized[NetBufferSize]; - memset(sanitized, 0, NetBufferSize); + char sanitized[MAXBUF]; // use GetBuffer to copy single lines into the sanitized string strlcpy(sanitized,current->GetBuffer().c_str(),MAXBUF); if (*sanitized) { - - // we're gonna re-scan to check if the nick is gone, after every // command - if it has, we're gonna bail bool find_again = false; process_buffer(sanitized,current); - // look for the user's record in case it's changed for (user_hash::iterator c2 = clientlist.begin(); c2 != clientlist.end(); c2++) { @@ -4122,7 +4131,6 @@ int InspIRCd(void) goto label; } - //l = strtok(NULL,"\n"); } goto label; } |