# 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);