diff mcabber/src/socket.c @ 26:8588f5a4b638

[/trunk] Changeset 42 by mikael * Potential bugfixes.
author mikael
date Mon, 28 Mar 2005 08:54:43 +0000
parents e88b15cbf2de
children 0cd8025eebee
line wrap: on
line diff
--- a/mcabber/src/socket.c	Sun Mar 27 20:18:21 2005 +0000
+++ b/mcabber/src/socket.c	Mon Mar 28 08:54:43 2005 +0000
@@ -64,11 +64,8 @@
   int tambuffer = 128;
   char mtag[16];    // For tag name
 
-  char *buffer = malloc(tambuffer);
-  char *retval = malloc(tambuffer + 1);
-
-  memset(retval, 0, tambuffer);
-  memset(buffer, 0, tambuffer + 1);
+  char *buffer = calloc(1, tambuffer);
+  char *retval = calloc(1, tambuffer + 1);
 
   while (1) {
     char *p1;
@@ -82,7 +79,7 @@
 
     if (i == 1) {
       char *p2;
-      strcpy(retval, buffer);
+      strncpy(retval, buffer, tambuffer);
       p1 = retval+1;
       p2 = mtag;
       while (('a' <= *p1) && (*p1 <= 'z') && (p2-mtag < 14))
@@ -90,11 +87,18 @@
       *p2++ = '>'; *p2++ = 0;
       //fprintf(stderr, "TAG=\"%s\"\n", mtag);
     } else {
+      char *old_retval = retval;
       scr_LogPrint("Realloc %d [%d]", i-1, n);
       if (!n)
         break;
       retval = realloc(retval, (tambuffer * i) + 1);
-      strncat(retval, buffer, tambuffer + 1);
+      if (!retval) {
+        scr_LogPrint("Memory allocation failure!!");
+        ut_WriteLog("Memory allocation failure in sk_recv()\n", retval);
+        free(buffer);
+        return old_retval;
+      }
+      strncat(retval, buffer, tambuffer);
     }
     i++;
     p1 = retval + strlen(retval) - strlen(mtag);