From b14f151b42ca9fddd52bee7c323e1217b28ae8af Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 18 May 2010 17:27:06 -0400 Subject: [PATCH] If no evdns request can be launched, return NULL, not a handle Some of our evdns code was willing to return an evdns_request with handle->current_req set to NULL. Really, those cases should just return NULL. --- evdns.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/evdns.c b/evdns.c index 7b2b72cc..309b466e 100644 --- a/evdns.c +++ b/evdns.c @@ -2692,8 +2692,12 @@ evdns_base_resolve_ipv4(struct evdns_base *base, const char *name, int flags, if (req) request_submit(req); } else { - req = search_request_new(base, handle, TYPE_A, name, flags, - callback, ptr); + search_request_new(base, handle, TYPE_A, name, flags, + callback, ptr); + } + if (handle->current_req == NULL) { + mm_free(handle); + handle = NULL; } EVDNS_UNLOCK(base); return handle; @@ -2726,8 +2730,12 @@ evdns_base_resolve_ipv6(struct evdns_base *base, if (req) request_submit(req); } else { - req = search_request_new(base, handle, TYPE_AAAA, name, flags, - callback, ptr); + search_request_new(base, handle, TYPE_AAAA, name, flags, + callback, ptr); + } + if (handle->current_req == NULL) { + mm_free(handle); + handle = NULL; } EVDNS_UNLOCK(base); return handle; @@ -2760,6 +2768,10 @@ evdns_base_resolve_reverse(struct evdns_base *base, const struct in_addr *in, in req = request_new(base, handle, TYPE_PTR, buf, flags, callback, ptr); if (req) request_submit(req); + if (handle->current_req == NULL) { + mm_free(handle); + handle = NULL; + } EVDNS_UNLOCK(base); return (handle); } @@ -2796,6 +2808,10 @@ evdns_base_resolve_reverse_ipv6(struct evdns_base *base, const struct in6_addr * req = request_new(base, handle, TYPE_PTR, buf, flags, callback, ptr); if (req) request_submit(req); + if (handle->current_req == NULL) { + mm_free(handle); + handle = NULL; + } EVDNS_UNLOCK(base); return (handle); } -- 2.40.0