From e05ddf3e18a019b7db833448c666cbf056444d0d Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 20 Jul 2011 13:40:09 -0400 Subject: [PATCH] Check for port config before addr config in client port options Otherwise, we'll fail, since "9050" looks like a perfectly fine address. --- src/or/config.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 7a96304e18..96d50954ba 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -5039,20 +5039,23 @@ parse_client_port_config(smartlist_t *out, tor_free(addrtmp); goto err; } - } else if (tor_addr_port_parse(addrport, &addr, &ptmp) == 0) { - if (ptmp == 0) { - log_warn(LD_CONFIG, "%sPort line has address but no port", portname); - goto err; - } - port = ptmp; } else { + /* Try parsing integer port before address, because, who knows? + "9050" might be a valid address. */ port = (int) tor_parse_long(addrport, 10, 0, 65535, &ok, NULL); - if (!ok) { + if (ok) { + tor_addr_from_str(&addr, defaultaddr); + } else if (tor_addr_port_parse(addrport, &addr, &ptmp) == 0) { + if (ptmp == 0) { + log_warn(LD_CONFIG, "%sPort line has address but no port", portname); + goto err; + } + port = ptmp; + } else { log_warn(LD_CONFIG, "Couldn't parse address '%s' for %sPort", escaped(addrport), portname); goto err; } - tor_addr_from_str(&addr, defaultaddr); } /* Now parse the rest of the options, if any. */