Browse Source

Merge remote-tracking branch 'teor/bug27237'

Nick Mathewson 5 years ago
parent
commit
622231ce2e
2 changed files with 12 additions and 3 deletions
  1. 4 0
      changes/bug27237
  2. 8 3
      src/feature/nodelist/nodelist.c

+ 4 - 0
changes/bug27237

@@ -0,0 +1,4 @@
+  o Minor bugfixes (bootstrap):
+    - Try harder to get descriptors in non-exit test networks, by
+      using the mid weight for the third hop when there are no exits.
+      Fixes bug 27237; bugfix on 0.2.6.2-alpha.

+ 8 - 3
src/feature/nodelist/nodelist.c

@@ -2382,9 +2382,14 @@ compute_frac_paths_available(const networkstatus_t *consensus,
       f_exit = f_myexit;
   }
 
-  /* if the consensus has no exits, treat the exit fraction as 100% */
+  /* if the consensus has no exits, we can only build onion service paths,
+   * which are G - M - M. So use the middle fraction for the exit fraction. */
   if (router_have_consensus_path() != CONSENSUS_PATH_EXIT) {
-    f_exit = 1.0;
+    /* If there are no exits in the consensus, then f_exit is always 0, so
+     * it is safe to replace f_exit with f_mid. */
+    if (!BUG(f_exit > 0.0)) {
+      f_exit = f_mid;
+    }
   }
 
   f_path = f_guard * f_mid * f_exit;
@@ -2400,7 +2405,7 @@ compute_frac_paths_available(const networkstatus_t *consensus,
                  (int)(f_exit*100),
                  (router_have_consensus_path() == CONSENSUS_PATH_EXIT ?
                   "exit bw" :
-                  "end bw (no exits in consensus)"),
+                  "end bw (no exits in consensus, using mid)"),
                  (int)(f_path*100));
 
   return f_path;