aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/or/routerlist.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index daed36aad..87a063e33 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -911,11 +911,13 @@ static int router_add_exit_policy(routerinfo_t *router,
address = arg;
mask = strchr(arg,'/');
port = strchr(mask?mask:arg,':');
- if(!port)
- goto policy_read_failed;
+ /* Break 'arg' into separate strings. 'arg' was already strdup'd by
+ * _router_get_next_token, so it's safe to modify.
+ */
if (mask)
*mask++ = 0;
- *port++ = 0;
+ if (port)
+ *port++ = 0;
if (strcmp(address, "*") == 0) {
newe->addr = 0;
@@ -945,7 +947,7 @@ static int router_add_exit_policy(routerinfo_t *router,
goto policy_read_failed;
}
}
- if (strcmp(port, "*") == 0) {
+ if (!port || strcmp(port, "*") == 0) {
newe->prt_min = 1;
newe->prt_max = 65535;
} else {