ares_query_completed_cb: don't touch invalid data
authorDaniel Stenberg <daniel@haxx.se>
Thu, 27 Jan 2011 12:59:11 +0000 (13:59 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 27 Jan 2011 13:41:07 +0000 (14:41 +0100)
When this callback is called due to the destruction of the ares handle,
the connection pointer passed in as an argument may no longer pointing
to valid data and this function doesn't need to do anything with it
anyway so we make sure it doesn't.

Bug: http://curl.haxx.se/mail/lib-2011-01/0333.html
Reported by: Vsevolod Novikov

lib/hostares.c

index 8b1dc06..a165cb9 100644 (file)
@@ -332,8 +332,17 @@ static void ares_query_completed_cb(void *arg,  /* (struct connectdata *) */
   (void)timeouts; /* ignored */
 #endif
 
-  if (status == CURL_ASYNC_SUCCESS) {
+  switch(status) {
+  case CURL_ASYNC_SUCCESS:
     ai = Curl_he2ai(hostent, conn->async.port);
+    break;
+  case ARES_EDESTRUCTION:
+    /* this ares handle is getting destroyed, the 'arg' pointer may not be
+       valid! */
+    return;
+  default:
+    /* do nothing */
+    break;
   }
 
   (void)Curl_addrinfo_callback(arg, status, ai);