Commit 3ed4c5dc authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Correct the bulletproofing of routerlist_insert()

The original code updated some variables, but forgot to remove a
replaced old-routerdesc from rl->old_routers.

Related to bug 1776.
parent 8e077982
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
  o Minor bugfixes:
    - If we hit the error case where routerlist_insert() replaces an
      existing (old) server descriptor, make sure to remove that
      server descriptor from the old_routers list. Fix related to bug
      1776. Bugfix on 0.2.2.18-alpha.
+7 −0
Original line number Diff line number Diff line
@@ -2815,6 +2815,13 @@ routerlist_insert(routerlist_t *rl, routerinfo_t *ri)
                     ri->cache_info.signed_descriptor_digest,
                     &(ri->cache_info));
  if (sd_old) {
    int idx = sd_old->routerlist_index;
    sd_old->routerlist_index = -1;
    smartlist_del(rl->old_routers, idx);
    if (idx < smartlist_len(rl->old_routers)) {
       signed_descriptor_t *d = smartlist_get(rl->old_routers, idx);
       d->routerlist_index = idx;
    }
    rl->desc_store.bytes_dropped += sd_old->signed_descriptor_len;
    sdmap_remove(rl->desc_by_eid_map, sd_old->extra_info_digest);
    signed_descriptor_free(sd_old);