- irc.c:irc_send(): fixed bug where over-length messages were not terminated with...
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>
Mon, 29 Dec 2014 15:12:49 +0000 (15:12 +0000)
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>
Mon, 29 Dec 2014 15:12:49 +0000 (15:12 +0000)
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/hopm/trunk@5193 82007160-df01-0410-b94d-b575c5fd34c7

src/irc.c

index 572c243086df18f30241c05daa5fcf04d9b019a6..5c08b9cdb643fd3117350250602b79c00e5b4674 100644 (file)
--- a/src/irc.c
+++ b/src/irc.c
@@ -304,19 +304,23 @@ void
 irc_send(const char *data, ...)
 {
   va_list arglist;
-  char data2[MSGLENMAX];
-  char tosend[MSGLENMAX];
+  char buf[MSGLENMAX];
+  int len = 0;
 
   va_start(arglist, data);
-  vsnprintf(data2, MSGLENMAX, data, arglist);
+  len = vsnprintf(buf, sizeof(buf), data, arglist);
   va_end(arglist);
 
   if (OPT_DEBUG >= 2)
-    log_printf("IRC SEND -> %s", data2);
+    log_printf("IRC SEND -> %s", buf);
+
+  if (len > 510)
+    len = 510;
 
-  snprintf(tosend, MSGLENMAX, "%s\n", data2);
+  buf[len++] = '\r';
+  buf[len++] = '\n';
 
-  if (send(IRC_FD, tosend, strlen(tosend), 0) == -1)
+  if (send(IRC_FD, buf, len, 0) == -1)
   {
     /* Return of -1 indicates error sending data; we reconnect. */
     log_printf("IRC -> Error sending data to server\n");