[tor-commits] [tor/master] When there are no dir_server_ts to choose, don't crash

nickm at torproject.org nickm at torproject.org
Wed Dec 19 02:35:02 UTC 2012


commit 8b5787ec0d99a130ead302f7c6b4a256325ac08f
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Dec 18 21:32:53 2012 -0500

    When there are no dir_server_ts to choose, don't crash
    
    It's important not to call choose_array_element_by_weight and then
    pass its return value unchecked to smartlist_get : it is allowed to
    return -1.
    
    Fixes bug 7756; bugfix on 4e3d07a6 (not in any released Tor)
---
 src/or/routerlist.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 972d451..898b9b5 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1270,7 +1270,7 @@ dirserver_choose_by_weight(const smartlist_t *servers, double authority_weight)
   scale_array_elements_to_u64(weights, n, NULL);
   i = choose_array_element_by_weight(weights, n);
   tor_free(weights);
-  return smartlist_get(servers, i);
+  return (i < 0) ? NULL : smartlist_get(servers, i);
 }
 
 /** Choose randomly from among the dir_server_ts in sourcelist that



More information about the tor-commits mailing list