diff --git a/ChangeLog b/ChangeLog index 4bc9c58adf..f25a535812 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,9 @@ Changes in version 0.2.0.14-alpha - 2007-12-?? time you use a given introduction point for your service, but on subsequent requests we'd be using garbage memory. Fixed by Karsten Loesing. Bugfix on 0.2.0.12-alpha. + - Fix a crash when we load a bridge descriptor from disk but we don't + currently have a Bridge line for it in our torrc. Bugfix on + 0.2.0.12-alpha. o Minor bugfixes: - Make the unit tests build again. diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 424d2e1950..6ca23b9d51 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -2908,6 +2908,7 @@ bridge_fetch_status_increment(bridge_info_t *bridge, time_t now) static void bridge_fetch_status_arrived(bridge_info_t *bridge, time_t now) { + tor_assert(bridge); bridge->fetch_status.next_attempt_at = now+60*60; bridge->fetch_status.n_download_failures = 0; } @@ -3038,13 +3039,15 @@ learned_bridge_descriptor(routerinfo_t *ri) time_t now = time(NULL); ri->is_running = 1; - /* it's here; schedule its re-fetch for a long time from now. */ - bridge_fetch_status_arrived(bridge, now); + if (bridge) { /* if we actually want to use this one */ + /* it's here; schedule its re-fetch for a long time from now. */ + bridge_fetch_status_arrived(bridge, now); - add_an_entry_guard(ri, 1); - log_notice(LD_DIR, "new bridge descriptor '%s'", ri->nickname); - if (first) - routerlist_retry_directory_downloads(now); + add_an_entry_guard(ri, 1); + log_notice(LD_DIR, "new bridge descriptor '%s'", ri->nickname); + if (first) + routerlist_retry_directory_downloads(now); + } } } diff --git a/src/or/routerlist.c b/src/or/routerlist.c index de3e1e99c3..0c56d440e3 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -3050,8 +3050,8 @@ routerlist_remove_old_routers(void) digestmap_free(retain, NULL); } -/** We just added a new descriptor that isn't of purpose - * ROUTER_PURPOSE_GENERAL. Take whatever extra steps we need. */ +/** We just added a new set of descriptors. Take whatever extra steps + * we need. */ static void routerlist_descriptors_added(smartlist_t *sl) {