tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 2074fed6642713bcdfdc76f379956e97663ab8d0
parent 35e978da61efa04af9a5ab2399dff863bc6fb20a
Author: Nick Mathewson <nickm@torproject.org>
Date:   Wed, 28 Aug 2019 11:51:16 -0400

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.

Diffstat:
Msrc/feature/nodelist/routerset.c | 10++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/feature/nodelist/routerset.c b/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."); return -1; } else { + if (routerset_is_empty(rs)) { + /* Represent empty sets as NULL. */ + routerset_free(rs); + } *p = rs; return 0; } @@ -507,8 +511,10 @@ routerset_copy(void *dest, const void *src, const void *params) routerset_t **output = (routerset_t**)dest; const routerset_t *input = *(routerset_t**)src; 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; }