Commit 68d5b6bc authored by Nick Mathewson's avatar Nick Mathewson 🐘
Browse files

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 81eee0ec; found by
lodger; uploaded to trac by rransom.  Bug 2363.  Fix on 0.2.2.6-alpha.
parent 732275bb
Loading
Loading
Loading
Loading

changes/bug2363

0 → 100644
+6 −0
Changes for changes/bug2363: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
  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.
+7 −3
Changes for src/or/dns.c: 7 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -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) \