Mercurial > hg
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);