summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2013-07-28 09:50:19 -0400
committerRoger Dingledine <arma@torproject.org>2013-07-28 09:50:19 -0400
commit4a1d9726f4d6e212ec2f0e1ac90a3f09ca27c853 (patch)
treeb2a5a8a8acb846420ff033bfebec9a59caef2aa8
parent2b9fb51ac61c75d582008e892773fc1571145d65 (diff)
parent8d0fb3a4347aa543d2aa27f177446888fbdae125 (diff)
downloadtor-4a1d9726f4d6e212ec2f0e1ac90a3f09ca27c853.tar.gz
tor-4a1d9726f4d6e212ec2f0e1ac90a3f09ca27c853.zip
Merge branch 'maint-0.2.4' into release-0.2.4
-rw-r--r--changes/bug93096
-rw-r--r--changes/bug93374
-rw-r--r--src/or/channel.c4
-rw-r--r--src/or/channeltls.c5
-rw-r--r--src/or/dns.c8
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));