Commit 0f0d4356 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Don't try to use confirmed_idx in remove_guard_from_...lists()

Since we can call this function more than once before we update all
the confirmed_idx fields, we can't rely on all the relays having an
accurate confirmed_idx.

Fixes bug 21129; bugfix on 0.3.0.1-alpha
parent 09a00a2f
Loading
Loading
Loading
Loading

changes/bug21129

0 → 100644
+4 −0
Original line number Diff line number Diff line
  o Minor bugfixes (client, entry guards):
    - Fix a spurious bug warning (with backtrace) when removing an
      expired entry guard.  Fixes bug 21129; bugfix on 0.3.0.1-alpha.
+1 −12
Original line number Diff line number Diff line
@@ -1112,18 +1112,7 @@ remove_guard_from_confirmed_and_primary_lists(guard_selection_t *gs,
  }

  if (guard->confirmed_idx >= 0) {
    entry_guard_t *found_guard = NULL;
    if (guard->confirmed_idx < smartlist_len(gs->confirmed_entry_guards))
      found_guard = smartlist_get(gs->confirmed_entry_guards,
                                  guard->confirmed_idx);
    if (BUG(guard != found_guard)) {
      // LCOV_EXCL_START
    smartlist_remove_keeporder(gs->confirmed_entry_guards, guard);
      // LCOV_EXCL_STOP
    } else {
      smartlist_del_keeporder(gs->confirmed_entry_guards,
                              guard->confirmed_idx);
    }
    guard->confirmed_idx = -1;
    guard->confirmed_on_date = 0;
  } else {