prevent same entry and exit for insane edge case

This commit is contained in:
Roger Dingledine 2011-02-22 17:54:25 -05:00
parent 4f730e4f3f
commit a2727f6249
2 changed files with 8 additions and 1 deletions

6
changes/bug2403 Normal file
View File

@ -0,0 +1,6 @@
o Minor bugfixes:
- In the special case where you configure a public exit relay as your
bridge, Tor would be willing to use that exit relay as the last
hop in your circuit as well. Now we fail that circuit instead.
Bugfix on 0.2.0.12-alpha. Fixes bug 2403. Reported by "piebeer".

View File

@ -4063,7 +4063,6 @@ choose_random_entry(cpath_build_state_t *state)
int preferred_min, consider_exit_family = 0; int preferred_min, consider_exit_family = 0;
if (chosen_exit) { if (chosen_exit) {
smartlist_add(exit_family, chosen_exit);
routerlist_add_family(exit_family, chosen_exit); routerlist_add_family(exit_family, chosen_exit);
consider_exit_family = 1; consider_exit_family = 1;
} }
@ -4086,6 +4085,8 @@ choose_random_entry(cpath_build_state_t *state)
r = entry_is_live(entry, need_uptime, need_capacity, 0, &msg); r = entry_is_live(entry, need_uptime, need_capacity, 0, &msg);
if (!r) if (!r)
continue; /* down, no point */ continue; /* down, no point */
if (r == chosen_exit)
continue; /* don't pick the same node for entry and exit */
if (consider_exit_family && smartlist_isin(exit_family, r)) if (consider_exit_family && smartlist_isin(exit_family, r))
continue; /* avoid relays that are family members of our exit */ continue; /* avoid relays that are family members of our exit */
if (options->EntryNodes && if (options->EntryNodes &&