# HG changeset patch # User mikael # Date 1112000083 0 # Node ID 8588f5a4b638fdf1ba90fd89e95b643624d2dec1 # Parent bf3d6e2417142eea3bf5f2ad1ee5646eae33df19 [/trunk] Changeset 42 by mikael * Potential bugfixes. diff -r bf3d6e241714 -r 8588f5a4b638 mcabber/src/main.c --- a/mcabber/src/main.c Sun Mar 27 20:18:21 2005 +0000 +++ b/mcabber/src/main.c Mon Mar 28 08:54:43 2005 +0000 @@ -164,7 +164,7 @@ scr_TerminateCurses(); return -3; } - ut_WriteLog("Connected to %s: %s\n", servername, idsession); + ut_WriteLog("Connected to %.48s: %s\n", servername, idsession); free(idsession); ut_WriteLog("Requesting roster...\n"); diff -r bf3d6e241714 -r 8588f5a4b638 mcabber/src/server.c --- a/mcabber/src/server.c Sun Mar 27 20:18:21 2005 +0000 +++ b/mcabber/src/server.c Mon Mar 28 08:54:43 2005 +0000 @@ -29,7 +29,7 @@ { struct pollfd sock_p; sock_p.fd = sock; - sock_p.events = POLLIN | POLLPRI; + sock_p.events = (short int) (POLLIN | POLLPRI); sock_p.revents = 0; poll(&sock_p, 1, 0); @@ -57,10 +57,10 @@ if (!(he = gethostbyname(host))) return 0; else - return (*(u_long *) he->h_addr); + return (*(u_long *) he->h_addr); // XXX Memory leak } - return i; + return (u_long) i; } @@ -114,7 +114,7 @@ { char *stringtosend = malloc(2048); char *response, *aux; - char *idsession = malloc(128); + char *idsession = calloc(64, sizeof(char)); int pos = 0; memset(stringtosend, 0, 2048); @@ -126,6 +126,8 @@ if (!sk_send(sock, stringtosend)) { perror("senddata (server.c:132)"); + free(stringtosend); + free(idsession); return NULL; } response = sk_recv(sock); @@ -133,6 +135,9 @@ /* fprintf(stderr, "Response not valid:\n%s\n\n", response); */ scr_CreatePopup("Error", "Bad answer from the server", 60, 0, NULL); + free(response); + free(idsession); + free(stringtosend); return NULL; } aux = response; @@ -145,6 +150,13 @@ pos++; } aux -= pos; + if (pos > 64-1) { + ut_WriteLog("Bad session ID!\n"); + free(response); + free(idsession); + free(stringtosend); + return NULL; + } strncpy(idsession, aux, pos); free(response); @@ -190,7 +202,9 @@ response = sk_recv(sock); */ scr_TerminateCurses(); - printf("Reinicie cabber!\n\n"); + /* printf("Reinicie cabber!\n\n"); */ + free(idsession); + free(stringtosend); return NULL; } free(response); @@ -212,7 +226,7 @@ int rv; char *str = malloc(1024); - sprintf(str, "%s", type); + sprintf(str, "%.512s", type); if (!(rv = sk_send(sock, str))) { perror("senddata (server.c:199)"); } @@ -237,6 +251,7 @@ strcat(str, "jabber:iq:roster'/>\n"); if (!sk_send(sock, str)) { perror("senddata (server.c:222)"); + free(str); return NULL; } free(str); @@ -263,6 +278,8 @@ from, to, utf8inputline); if (!sk_send(sock, stringtosend)) { perror("senddata (server.c:247)"); + free(stringtosend); + free(utf8inputline); return -1; } diff -r bf3d6e241714 -r 8588f5a4b638 mcabber/src/socket.c --- 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);