diff options
author | Roger Dingledine <arma@torproject.org> | 2013-07-28 09:50:19 -0400 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2013-07-28 09:50:19 -0400 |
commit | 4a1d9726f4d6e212ec2f0e1ac90a3f09ca27c853 (patch) | |
tree | b2a5a8a8acb846420ff033bfebec9a59caef2aa8 | |
parent | 2b9fb51ac61c75d582008e892773fc1571145d65 (diff) | |
parent | 8d0fb3a4347aa543d2aa27f177446888fbdae125 (diff) | |
download | tor-4a1d9726f4d6e212ec2f0e1ac90a3f09ca27c853.tar.gz tor-4a1d9726f4d6e212ec2f0e1ac90a3f09ca27c853.zip |
Merge branch 'maint-0.2.4' into release-0.2.4
-rw-r--r-- | changes/bug9309 | 6 | ||||
-rw-r--r-- | changes/bug9337 | 4 | ||||
-rw-r--r-- | src/or/channel.c | 4 | ||||
-rw-r--r-- | src/or/channeltls.c | 5 | ||||
-rw-r--r-- | src/or/dns.c | 8 |
5 files changed, 18 insertions, 9 deletions
diff --git a/changes/bug9309 b/changes/bug9309 new file mode 100644 index 0000000000..38c462bc0f --- /dev/null +++ b/changes/bug9309 @@ -0,0 +1,6 @@ + o Minor bugfixes: + - When evaluating whether to use a connection that we haven't + decided is canonical using a recent link protocol version, + decide that it's canonical only if it used address _does_ + match the desired address. Fixes bug 9309; bugfix on + 0.2.4.4-alpha. Reported by skruffy. diff --git a/changes/bug9337 b/changes/bug9337 new file mode 100644 index 0000000000..ce99bc8184 --- /dev/null +++ b/changes/bug9337 @@ -0,0 +1,4 @@ + o Major bugfixes (DNS): + - Avoid an assertion failure when processing DNS replies without the + answer types we expected. Fixes bug 9337; bugfix on 0.2.4.7-alpha. + diff --git a/src/or/channel.c b/src/or/channel.c index 4e9086f2e6..602797d0dc 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -3037,7 +3037,7 @@ channel_get_for_extend(const char *digest, if (chan->state != CHANNEL_STATE_OPEN) { /* If the address matches, don't launch a new connection for this * circuit. */ - if (!channel_matches_target_addr_for_extend(chan, target_addr)) + if (channel_matches_target_addr_for_extend(chan, target_addr)) ++n_inprogress_goodaddr; continue; } @@ -4053,7 +4053,7 @@ channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info) } /** - * Check if a channel matches a given target address + * Check if a channel matches a given target address; return true iff we do. * * This function calls into the lower layer and asks if this channel thinks * it matches a given target address for circuit extension purposes. diff --git a/src/or/channeltls.c b/src/or/channeltls.c index 60693daeb2..d758d22d82 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -546,7 +546,7 @@ channel_tls_matches_extend_info_method(channel_t *chan, } /** - * Check if we match a target address + * Check if we match a target address; return true iff we do. * * This implements the matches_target method for channel_tls t_; the upper * layer wants to know if this channel matches a target address when extending @@ -563,8 +563,7 @@ channel_tls_matches_target_method(channel_t *chan, tor_assert(target); tor_assert(tlschan->conn); - return tor_addr_compare(&(tlschan->conn->real_addr), - target, CMP_EXACT); + return tor_addr_eq(&(tlschan->conn->real_addr), target); } /** diff --git a/src/or/dns.c b/src/or/dns.c index edcf92e5b3..f2b7eecc3f 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -437,8 +437,8 @@ cached_resolve_add_answer(cached_resolve_t *resolve, if (resolve->res_status_ipv4 != RES_STATUS_INFLIGHT) return; - if (dns_result == DNS_ERR_NONE && answer_addr) { - tor_assert(tor_addr_family(answer_addr) == AF_INET); + if (dns_result == DNS_ERR_NONE && answer_addr && + tor_addr_family(answer_addr) == AF_INET) { resolve->result_ipv4.addr_ipv4 = tor_addr_to_ipv4h(answer_addr); resolve->res_status_ipv4 = RES_STATUS_DONE_OK; } else { @@ -450,8 +450,8 @@ cached_resolve_add_answer(cached_resolve_t *resolve, if (resolve->res_status_ipv6 != RES_STATUS_INFLIGHT) return; - if (dns_result == DNS_ERR_NONE && answer_addr) { - tor_assert(tor_addr_family(answer_addr) == AF_INET6); + if (dns_result == DNS_ERR_NONE && answer_addr && + tor_addr_family(answer_addr) == AF_INET6) { memcpy(&resolve->result_ipv6.addr_ipv6, tor_addr_to_in6(answer_addr), sizeof(struct in6_addr)); |