diff --git a/src/or/routerparse.c b/src/or/routerparse.c index c386a004a5..696271bc54 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -3402,7 +3402,7 @@ rend_decrypt_introduction_points(rend_service_descriptor_t *parsed, intro_points_encrypted_size = unenclen; } /* Consider one intro point after the other. */ - current_ipo = (const char **)&intro_points_encrypted; + current_ipo = &intro_points_encrypted; intropoints = smartlist_create(); tokens = smartlist_create(); if (parsed->intro_keys) { @@ -3479,6 +3479,9 @@ rend_decrypt_introduction_points(rend_service_descriptor_t *parsed, tok->key = NULL; /* Prevent free */ /* Add extend info to list of introduction points. */ smartlist_add(intropoints, info); + /* XXX if intropoints has items on it, but we goto err the next + * time through the loop, we don't free the items in the 'err' + * section below. -RD */ } /* Write extend infos to descriptor. */ /* XXXX020 what if intro_points (&tc) are already set? */ @@ -3506,6 +3509,8 @@ rend_decrypt_introduction_points(rend_service_descriptor_t *parsed, SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_free(t)); smartlist_free(tokens); + smartlist_free(intropoints); + return result; }