diff --git a/ChangeLog b/ChangeLog index d6edb098fe..d3f7fd0f1f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,12 @@ Changes in version 0.2.1.4-alpha - 2008-08-?? been established before, a false assertion was triggered. Noticed by phobos, fixed by karsten. Bugfix on 0.2.1.3-alpha. + o Minor bugfixes: + - In some edge cases it occurs that the router descriptor of a + previously picked introduction point becomes obsolete. In that case, + don't stick to using this introduction point, but simply give up on + it. Observed by xiando. Bugfix on 0.2.1.3-alpha. + Changes in version 0.2.1.3-alpha - 2008-08-03 o Bootstrapping bugfixes (on 0.2.1.x-alpha): diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 61736f5e0a..6cf4d591a2 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -1228,14 +1228,8 @@ rend_services_introduce(void) for (j=0; j < smartlist_len(service->intro_nodes); ++j) { intro = smartlist_get(service->intro_nodes, j); router = router_get_by_digest(intro->extend_info->identity_digest); - if (!router) { - log_warn(LD_BUG, "We have picked router %s as introduction point, " - "but we don't have its router descriptor. Skipping.", - intro->extend_info->nickname); - continue; - } - if (!find_intro_circuit(intro, service->pk_digest, - service->descriptor_version)) { + if (!router || !find_intro_circuit(intro, service->pk_digest, + service->descriptor_version)) { log_info(LD_REND,"Giving up on %s as intro point for %s.", intro->extend_info->nickname, service->service_id); if (service->desc) { @@ -1254,7 +1248,8 @@ rend_services_introduce(void) smartlist_del(service->intro_nodes,j--); changed = 1; } - smartlist_add(intro_routers, router); + if (router) + smartlist_add(intro_routers, router); } /* We have enough intro points, and the intro points we thought we had were