diff src/upnp.c @ 11213:ff728e84d59a

[gaim-migrate @ 13344] Changes by Adam Warrington Fixes a crash on UPnP timeout committer: Tailor Script <tailor@pidgin.im>
author Thomas Butter <tbutter>
date Mon, 08 Aug 2005 21:43:44 +0000
parents a015b1cb7368
children d3755a7ddd82
line wrap: on
line diff
--- a/src/upnp.c	Mon Aug 08 19:56:41 2005 +0000
+++ b/src/upnp.c	Mon Aug 08 21:43:44 2005 +0000
@@ -151,7 +151,7 @@
 
 static void
 gaim_upnp_timeout(gpointer data,
-                  gint source, 
+                  gint source,
                   GaimInputCondition cond)
 {
   HRD* hrd = data;
@@ -244,7 +244,7 @@
   hrd->done = FALSE;
 
   hrd->recvBuffer = (char*)malloc(MAX_DESCRIPTION_RECIEVE_SIZE);
-  if(hrd == NULL) {
+  if(hrd->recvBuffer == NULL) {
     gaim_debug_info("upnp",
       "gaim_upnp_http_request(): Failed in recvBuffer MALLOC\n\n");
     free(hrd);
@@ -644,7 +644,6 @@
 
   gaim_timeout_remove(hrd->tima);
   length = sizeof(struct sockaddr_in);
-  hrd->recvBuffer = (char*)malloc(MAX_DISCOVERY_RECIEVE_SIZE);
 
   do {
     sizeRecv = recvfrom(sock, hrd->recvBuffer,
@@ -665,6 +664,7 @@
 }
 
 
+
 char*
 gaim_upnp_discover(void)
 {
@@ -678,14 +678,19 @@
   char *controlURL = NULL;
 
   HRD* hrd = (HRD*)malloc(sizeof(HRD));
-  hrd->recvBuffer = NULL;
-  hrd->done = FALSE;
+  if(hrd == NULL) {
+    gaim_debug_info("upnp",
+      "gaim_upnp_discover(): Failed in hrd MALLOC\n\n");
+    return NULL;
+  }
 
   sock = socket(AF_INET, SOCK_DGRAM, 0);
   if (sock == -1) {
     close(sock);
     gaim_debug_info("upnp",
           "gaim_upnp_discover(): Failed In sock creation\n\n");
+    free(hrd->recvBuffer);
+    free(hrd);
     return NULL;
   }
 
@@ -695,6 +700,8 @@
     close(sock);
     gaim_debug_info("upnp",
           "gaim_upnp_discover(): Failed In gethostbyname\n\n");
+    free(hrd->recvBuffer);
+    free(hrd);
     return NULL;
   }
 
@@ -710,6 +717,18 @@
     recvSuccess = TRUE;
     totalSizeSent = 0;
 
+    hrd->recvBuffer = NULL;
+    hrd->totalSizeRecv = 0;
+    hrd->done = FALSE;
+
+    hrd->recvBuffer = (char*)malloc(MAX_DISCOVERY_RECIEVE_SIZE);
+    if(hrd->recvBuffer == NULL) {
+      gaim_debug_info("upnp",
+        "gaim_upnp_discover(): Failed in hrd->recvBuffer MALLOC\n\n");
+      free(hrd);
+      return NULL;
+    }
+
     while(totalSizeSent < strlen(sendMessage)) {
       sizeSent = sendto(sock,(void*)&sendMessage[totalSizeSent],
                         strlen(&sendMessage[totalSizeSent]),0,
@@ -742,6 +761,8 @@
                                          strlen(hrd->recvBuffer)))==NULL) {
           gaim_debug_info("upnp",
                        "gaim_upnp_discover(): Failed In parse response\n\n");
+          free(hrd->recvBuffer);
+          free(hrd);
           return NULL;
         }
       }
@@ -752,6 +773,12 @@
       i = NUM_UDP_ATTEMPTS;
     }
   }
+
+  if(hrd->recvBuffer != NULL) {
+    free(hrd->recvBuffer);
+  }
+  free(hrd);
+
   if(!sentSuccess || !recvSuccess) {
     close(sock);
     gaim_debug_info("upnp",