Fix max sampled size logic when in bridge mode.

When calculating max sampled size, Tor would only count the number of
bridges in torrc, without considering that our state file might already
have sampled bridges in it. This caused problems when people swap
bridges, since the following error would trigger:

         [warn] Not expanding the guard sample any further; just hit the
                maximum sample threshold of 1
This commit is contained in:
George Kadianakis 2017-03-27 15:08:18 +02:00 committed by Nick Mathewson
parent a5130de432
commit ef4c10fb42
2 changed files with 9 additions and 2 deletions

5
changes/bug21771 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (guard selection):
- Fix a guard selection bug where Tor would refuse to bootstrap in some
cases if the user swapped a bridge for another bridge in their
configuration file.
Fixes bug 21771; bugfix on 0.3.0.1-alpha. Reported by "torvlnt33r".

View File

@ -989,9 +989,11 @@ get_max_sample_size(guard_selection_t *gs,
const int using_bridges = (gs->type == GS_TYPE_BRIDGE); const int using_bridges = (gs->type == GS_TYPE_BRIDGE);
const int min_sample = get_min_filtered_sample_size(); const int min_sample = get_min_filtered_sample_size();
/* With bridges, max_sample is "all of them" */ /* If we are in bridge mode, expand our sample set as needed without worrying
* about max size. We should respect the user's wishes to use many bridges if
* that's what they have specified in their configuration file. */
if (using_bridges) if (using_bridges)
return n_guards; return INT_MAX;
const int max_sample_by_pct = (int)(n_guards * get_max_sample_threshold()); const int max_sample_by_pct = (int)(n_guards * get_max_sample_threshold());
const int max_sample_absolute = get_max_sample_size_absolute(); const int max_sample_absolute = get_max_sample_size_absolute();