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

[/trunk] Changeset 42 by mikael * Potential bugfixes.
author mikael
date Mon, 28 Mar 2005 08:54:43 +0000
parents e88b15cbf2de
children 77e6bd2ccde6
line wrap: on
line diff
--- 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;
   }