Fix segfault from double free

* process.c (check_for_dns): Protect against double free
issues.
This commit is contained in:
Lars Ingebrigtsen 2016-01-31 02:00:12 +01:00
parent e2d0ccc96e
commit 1f71df7aac

View file

@ -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 */