Browse Source

Merge branch 'bug19639_squashed'

Nick Mathewson 7 years ago
parent
commit
f0488551e7
4 changed files with 10 additions and 4 deletions
  1. 3 0
      changes/bug19639
  2. 5 3
      src/or/router.c
  3. 1 1
      src/or/routerlist.c
  4. 1 0
      src/or/routerlist.h

+ 3 - 0
changes/bug19639

@@ -0,0 +1,3 @@
+  o Minor bugfixes (circuits):
+    - Make sure extend_info_from_router is only called on servers.
+      Fixes bug 19639; bugfix on 0.2.8.1-alpha.

+ 5 - 3
src/or/router.c

@@ -1284,15 +1284,17 @@ decide_to_advertise_begindir(const or_options_t *options,
 }
 
 /** Allocate and return a new extend_info_t that can be used to build
- * a circuit to or through the router <b>r</b>. Use the primary
- * address of the router unless <b>for_direct_connect</b> is true, in
- * which case the preferred address is used instead. */
+ * a circuit to or through the router <b>r</b>. Uses the primary
+ * address of the router, so should only be called on a server. */
 static extend_info_t *
 extend_info_from_router(const routerinfo_t *r)
 {
   tor_addr_port_t ap;
   tor_assert(r);
 
+  /* Make sure we don't need to check address reachability */
+  tor_assert_nonfatal(!router_skip_or_reachability(get_options(), 0));
+
   router_get_prim_orport(r, &ap);
   return extend_info_new(r->nickname, r->cache_info.identity_digest,
                          r->onion_pkey, r->onion_curve25519_pkey,

+ 1 - 1
src/or/routerlist.c

@@ -1870,7 +1870,7 @@ router_picked_poor_directory_log(const routerstatus_t *rs)
 /* When iterating through the routerlist, can OR address/port preference
  * and reachability checks be skipped?
  */
-static int
+int
 router_skip_or_reachability(const or_options_t *options, int try_ip_pref)
 {
   /* Servers always have and prefer IPv4.

+ 1 - 0
src/or/routerlist.h

@@ -58,6 +58,7 @@ const routerstatus_t *router_pick_trusteddirserver(dirinfo_type_t type,
                                                    int flags);
 const routerstatus_t *router_pick_fallback_dirserver(dirinfo_type_t type,
                                                      int flags);
+int router_skip_or_reachability(const or_options_t *options, int try_ip_pref);
 int router_get_my_share_of_directory_requests(double *v3_share_out);
 void router_reset_status_download_failures(void);
 int routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2);