浏览代码

Routerset config parsing: represent empty sets as NULL.

routerset_t has two representations of an empty routerset: NULL, and
a set containing no elements.  But some of our config code assumes
that empty routersets are represented as NULL.  So let's give it
what it assumes.

Fixes bug 31495. Bugfix on e16b90b88a76; but not in any released
Tor.
Nick Mathewson 7 年之前
父节点
当前提交
2074fed664
共有 1 个文件被更改,包括 8 次插入 和 2 次删除
  1. 8 2
      src/feature/nodelist/routerset.c

+ 8 - 2
src/feature/nodelist/routerset.c

@@ -479,6 +479,10 @@ routerset_kv_parse(void *target, const config_line_t *line, char **errmsg,
     *errmsg = tor_strdup("Invalid router list.");
     *errmsg = tor_strdup("Invalid router list.");
     return -1;
     return -1;
   } else {
   } else {
+    if (routerset_is_empty(rs)) {
+      /* Represent empty sets as NULL. */
+      routerset_free(rs);
+    }
     *p = rs;
     *p = rs;
     return 0;
     return 0;
   }
   }
@@ -507,8 +511,10 @@ routerset_copy(void *dest, const void *src, const void *params)
   routerset_t **output = (routerset_t**)dest;
   routerset_t **output = (routerset_t**)dest;
   const routerset_t *input = *(routerset_t**)src;
   const routerset_t *input = *(routerset_t**)src;
   routerset_free(*output); // sets *output to NULL
   routerset_free(*output); // sets *output to NULL
-  *output = routerset_new();
-  routerset_union(*output, input);
+  if (! routerset_is_empty(input)) {
+    *output = routerset_new();
+    routerset_union(*output, input);
+  }
   return 0;
   return 0;
 }
 }