changeset 26:8588f5a4b638

[/trunk] Changeset 42 by mikael * Potential bugfixes.
author mikael
date Mon, 28 Mar 2005 08:54:43 +0000
parents bf3d6e241714
children 77e6bd2ccde6
files mcabber/src/main.c mcabber/src/server.c mcabber/src/socket.c
diffstat 3 files changed, 35 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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");
--- 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, "<presence><status>%s</status></presence>", type);
+  sprintf(str, "<presence><status>%.512s</status></presence>", type);
   if (!(rv = sk_send(sock, str))) {
     perror("senddata (server.c:199)");
   }
@@ -237,6 +251,7 @@
   strcat(str, "jabber:iq:roster'/></iq>\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;
   }
 
--- 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);