aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Ingebrigtsen2016-01-31 02:00:12 +0100
committerLars Ingebrigtsen2016-01-31 02:00:12 +0100
commit1f71df7aacf15dbf242c74a4b7a7ac8fe0984a3c (patch)
tree11136901fcb93c5dc4097045ef9caf18cb39dad6 /src
parente2d0ccc96e3314d836c7b38fbee4c30eb8ee9dac (diff)
downloademacs-1f71df7aacf15dbf242c74a4b7a7ac8fe0984a3c.tar.gz
emacs-1f71df7aacf15dbf242c74a4b7a7ac8fe0984a3c.zip
Fix segfault from double free
* process.c (check_for_dns): Protect against double free issues.
Diffstat (limited to 'src')
-rw-r--r--src/process.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/process.c b/src/process.c
index 0fe45185361..a30dd23077c 100644
--- a/src/process.c
+++ b/src/process.c
@@ -4542,6 +4542,11 @@ check_for_dns (Lisp_Object proc)
4542 struct Lisp_Process *p = XPROCESS (proc); 4542 struct Lisp_Process *p = XPROCESS (proc);
4543 Lisp_Object ip_addresses = Qnil; 4543 Lisp_Object ip_addresses = Qnil;
4544 int ret = 0; 4544 int ret = 0;
4545 int connect = 0;
4546
4547 /* Sanity check. */
4548 if (! p->dns_requests)
4549 return 1;
4545 4550
4546 ret = gai_error (p->dns_requests[0]); 4551 ret = gai_error (p->dns_requests[0]);
4547 if (ret == EAI_INPROGRESS) 4552 if (ret == EAI_INPROGRESS)
@@ -4561,7 +4566,7 @@ check_for_dns (Lisp_Object proc)
4561 4566
4562 ip_addresses = Fnreverse (ip_addresses); 4567 ip_addresses = Fnreverse (ip_addresses);
4563 freeaddrinfo (p->dns_requests[0]->ar_result); 4568 freeaddrinfo (p->dns_requests[0]->ar_result);
4564 connect_network_socket (proc, ip_addresses); 4569 connect = 1;
4565 } 4570 }
4566 else 4571 else
4567 pset_status (p, Qfailed); 4572 pset_status (p, Qfailed);
@@ -4571,6 +4576,11 @@ check_for_dns (Lisp_Object proc)
4571 xfree ((void *)p->dns_requests[0]->ar_service); 4576 xfree ((void *)p->dns_requests[0]->ar_service);
4572 xfree (p->dns_requests[0]); 4577 xfree (p->dns_requests[0]);
4573 xfree (p->dns_requests); 4578 xfree (p->dns_requests);
4579 p->dns_requests = NULL;
4580
4581 if (connect)
4582 connect_network_socket (proc, ip_addresses);
4583
4574 return 1; 4584 return 1;
4575} 4585}
4576#endif /* HAVE_GETADDRINFO_A */ 4586#endif /* HAVE_GETADDRINFO_A */