From 73e85dd08fd3d9f3a98a30c9f9f9f46fee0d5e71 Mon Sep 17 00:00:00 2001 From: George Danchev Date: Wed, 12 Sep 2012 20:11:12 -0400 Subject: [PATCH 1/2] Avoid a memory-leak on OOM in evdns. --- evdns.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/evdns.c b/evdns.c index e9cea45b52..7b0fc2bd41 100644 --- a/evdns.c +++ b/evdns.c @@ -2291,7 +2291,10 @@ nameserver_send_probe(struct nameserver *const ns) { handle = mm_calloc(1, sizeof(*handle)); if (!handle) return; req = request_new(ns->base, handle, TYPE_A, "google.com", DNS_QUERY_NO_SEARCH, nameserver_probe_callback, ns); - if (!req) return; + if (!req) { + mm_free(handle); + return; + } ns->probe_request = handle; /* we force this into the inflight queue no matter what */ request_trans_id_set(req, transaction_id_pick(ns->base)); From f2bff75ed8d86b6a1247bfdb17a0bd462d2cacce Mon Sep 17 00:00:00 2001 From: George Danchev Date: Wed, 12 Sep 2012 20:12:03 -0400 Subject: [PATCH 2/2] FIx another memleak on OOM in evdns --- evdns.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/evdns.c b/evdns.c index 7b0fc2bd41..9e5a0f2b77 100644 --- a/evdns.c +++ b/evdns.c @@ -3159,6 +3159,8 @@ search_request_new(struct evdns_base *base, struct evdns_request *handle, handle->search_origname = mm_strdup(name); if (handle->search_origname == NULL) { /* XXX Should we dealloc req? If yes, how? */ + if (req) + mm_free(req); return NULL; } handle->search_state = base->global_search_state;