Kaynağa Gözat

Merge remote-tracking branch 'arma/bug22368'

Nick Mathewson 8 yıl önce
ebeveyn
işleme
ab9976b724
2 değiştirilmiş dosya ile 8 ekleme ve 5 silme
  1. 6 0
      changes/bug22368
  2. 2 5
      src/or/router.c

+ 6 - 0
changes/bug22368

@@ -0,0 +1,6 @@
+  o Major bugfixes:
+    - Relays that set MyFamily no longer free the elements of
+      options->MyFamily while making their descriptor. They tried to
+      access the freed elements, and then double-free them, when making
+      the next descriptor or when changing the config. Fixes bug 22368;
+      bugfix on 0.3.1.1-alpha.

+ 2 - 5
src/or/router.c

@@ -2289,7 +2289,7 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e)
        char *name = family->value;
        const node_t *member;
        if (!strcasecmp(name, options->Nickname))
-         goto skip; /* Don't list ourself, that's redundant */
+         continue; /* Don't list ourself, that's redundant */
        else
          member = node_get_by_nickname(name, 1);
        if (!member) {
@@ -2308,8 +2308,7 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e)
            smartlist_add_strdup(warned_nonexistent_family, name);
          }
          if (is_legal) {
-           smartlist_add(ri->declared_family, name);
-           name = NULL;
+           smartlist_add_strdup(ri->declared_family, name);
          }
        } else if (router_digest_is_me(member->identity)) {
          /* Don't list ourself in our own family; that's redundant */
@@ -2323,8 +2322,6 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e)
          if (smartlist_contains_string(warned_nonexistent_family, name))
            smartlist_string_remove(warned_nonexistent_family, name);
        }
-    skip:
-       tor_free(name);
     }
 
     /* remove duplicates from the list */