emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] feature/async-dns 1f71df7: Fix segfault from double free


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] feature/async-dns 1f71df7: Fix segfault from double free
Date: Sun, 31 Jan 2016 01:00:20 +0000

branch: feature/async-dns
commit 1f71df7aacf15dbf242c74a4b7a7ac8fe0984a3c
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>

    Fix segfault from double free
    
    * process.c (check_for_dns): Protect against double free
    issues.
---
 src/process.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/src/process.c b/src/process.c
index 0fe4518..a30dd23 100644
--- a/src/process.c
+++ b/src/process.c
@@ -4542,6 +4542,11 @@ check_for_dns (Lisp_Object proc)
   struct Lisp_Process *p = XPROCESS (proc);
   Lisp_Object ip_addresses = Qnil;
   int ret = 0;
+  int connect = 0;
+
+  /* Sanity check. */
+  if (! p->dns_requests)
+    return 1;
 
   ret = gai_error (p->dns_requests[0]);
   if (ret == EAI_INPROGRESS)
@@ -4561,7 +4566,7 @@ check_for_dns (Lisp_Object proc)
 
       ip_addresses = Fnreverse (ip_addresses);
       freeaddrinfo (p->dns_requests[0]->ar_result);
-      connect_network_socket (proc, ip_addresses);
+      connect = 1;
     }
   else
     pset_status (p, Qfailed);
@@ -4571,6 +4576,11 @@ check_for_dns (Lisp_Object proc)
   xfree ((void *)p->dns_requests[0]->ar_service);
   xfree (p->dns_requests[0]);
   xfree (p->dns_requests);
+  p->dns_requests = NULL;
+
+  if (connect)
+    connect_network_socket (proc, ip_addresses);
+
   return 1;
 }
 #endif /* HAVE_GETADDRINFO_A */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]