]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Fixed weird issues when anope sends large amounts of text at once to the uplink
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 22 Apr 2005 21:16:09 +0000 (21:16 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 22 Apr 2005 21:16:09 +0000 (21:16 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1164 e03df62e-2008-0410-955e-edbf42e46eb7

src/commands.cpp
src/connection.cpp

index db2cd3624a1b0e064d3af694a3a92dab98f0a36d..98a5809f64efd3cae267e42e2838b5f973564a4f 100644 (file)
@@ -2825,9 +2825,15 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv)
        }
 
        char response[10240];
+       char old2[MAXBUF];
        char token = udp_msg[0];
        char* old = udp_msg;
 
+       if ((token != ':') && (strlen(udp_msg)>1) && (udp_msg[1] != ' '))
+       {
+               WriteOpers("*** Discarded %d chars illegal data from %s",strlen(udp_msg),tcp_host);
+       }
+
        if (token == ':') // leading :servername or details - strip them off (services does this, sucky)
        {
                char* src = udp_msg+1;
@@ -2937,7 +2943,6 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv)
                
        }
 
-
        char* params = udp_msg + 2;
        char finalparam[1024];
        strcpy(finalparam," :xxxx");
index b197caef1a43097200e71771fece4e344a885e9c..f6b2cea96de2ce568991d9dda24e219d6484caab 100644 (file)
@@ -436,6 +436,21 @@ bool connection::RecvPacket(std::deque<std::string> &messages, char* host)
                        }
                        if (rcvsize > 0)
                        {
+                               if ((data[rcvsize-1] != '\r') && (data[rcvsize-1] != '\n'))
+                               {
+                                       char foo = ' ';
+                                       while ((foo != '\n') && (rcvsize < 32767))
+                                       {
+                                               int x = recv(this->connectors[i].GetDescriptor(),(void*)&foo,1,0);
+                                               if ((x == -1) && (errno != EAGAIN))
+                                                       break;
+                                               if ((x) && (rcvsize < 32767))
+                                               {
+                                                       data[rcvsize] = foo;
+                                                       data[++rcvsize] = '\0';
+                                               }
+                                       }
+                               }
                                char* l = strtok(data,"\n");
                                while (l)
                                {