From: Nick Mathewson Date: Wed, 19 Dec 2012 02:32:53 +0000 (-0500) Subject: When there are no dir_server_ts to choose, don't crash X-Git-Tag: tor-0.2.4.7-alpha~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8b5787ec0d99a130ead302f7c6b4a256325ac08f;p=thirdparty%2Ftor.git 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) --- diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 972d4513dd..898b9b5b98 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