diff options
author | Nick Mathewson <nickm@torproject.org> | 2011-01-09 18:54:45 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2011-01-09 19:02:57 -0500 |
commit | 68d5b6bc5213b7eb411810361e04fe371ef19048 (patch) | |
tree | e4ce3acbaff86aedb8d7b28bd87699a370359d1d | |
parent | 732275bb81992c33d6b707b64e621f161b97622a (diff) | |
download | tor-68d5b6bc5213b7eb411810361e04fe371ef19048.tar.gz tor-68d5b6bc5213b7eb411810361e04fe371ef19048.zip |
Fix check for failed evdns request creation
When using libevent 2, we use evdns_base_resolve_*(). When not, we
fake evdns_base_resolve_*() using evdns_resolve_*().
Our old check was looking for negative values (like libevent 2
returns), but our eventdns.c code returns 1. This code makes the
check just test for nonzero.
Note that this broken check was not for _resolve_ failures or even for
failures to _launch_ a resolve: it was for failures to _create_ or
_encode_ a resolve request.
Bug introduced in 81eee0ecfff3dac1e9438719d2f7dc0ba7e84a71; found by
lodger; uploaded to trac by rransom. Bug 2363. Fix on 0.2.2.6-alpha.
-rw-r--r-- | changes/bug2363 | 6 | ||||
-rw-r--r-- | src/or/dns.c | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/changes/bug2363 b/changes/bug2363 new file mode 100644 index 0000000000..179925f65c --- /dev/null +++ b/changes/bug2363 @@ -0,0 +1,6 @@ + o Minor bugfixes + - Correctly detect failures to create DNS requests when using Libevent + versions before v2. (Before Libevent 2, we used our own evdns + implementation. Its return values for Libevent's evdns_resolve_*() + functions are not consistent with those from Libevent.) Found by + Lodger; fixes bug 2363; bugfix on 0.2.2.6-alpha. diff --git a/src/or/dns.c b/src/or/dns.c index 5c763011ba..639317112d 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -54,12 +54,16 @@ struct evdns_request; evdns_config_windows_nameservers() #define evdns_base_set_option_(base, opt, val) \ evdns_set_option((opt),(val),DNS_OPTIONS_ALL) +/* Note: our internal eventdns.c, plus libevent 1.4, used a 1 return to + * signify failure to launch a resolve. Libevent 2.0 uses a -1 return to + * signify a failure on a resolve, though if we're on libevent 2.0, we should + * have event2/dns.h and never hit these macros. Regardless, 0 is success. */ #define evdns_base_resolve_ipv4(base, addr, options, cb, ptr) \ - ((evdns_resolve_ipv4(addr, options, cb, ptr)<0) ? NULL : ((void*)1)) + ((evdns_resolve_ipv4(addr, options, cb, ptr)!=0) ? NULL : ((void*)1)) #define evdns_base_resolve_reverse(base, addr, options, cb, ptr) \ - ((evdns_resolve_reverse(addr, options, cb, ptr)<0) ? NULL : ((void*)1)) + ((evdns_resolve_reverse(addr, options, cb, ptr)!=0) ? NULL : ((void*)1)) #define evdns_base_resolve_reverse_ipv6(base, addr, options, cb, ptr) \ - ((evdns_resolve_reverse_ipv6(addr, options, cb, ptr)<0) ? NULL : ((void*)1)) + ((evdns_resolve_reverse_ipv6(addr, options, cb, ptr)!=0) ? NULL : ((void*)1)) #elif defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER < 0x02000303 #define evdns_base_set_option_(base, opt, val) \ |