wireaddr: correct the onion case in wireaddr_from_hostname

And, this time, add tests !
This commit is contained in:
darosior 2019-09-14 00:25:41 +02:00 committed by Rusty Russell
parent fad133ed2e
commit 48fde4f0a5
2 changed files with 14 additions and 6 deletions

View File

@ -40,6 +40,7 @@ int main(void)
setup_locale();
struct wireaddr addr;
struct wireaddr *addresses = tal_arr(NULL, struct wireaddr, 0);
char *ip;
u16 port;
@ -104,7 +105,7 @@ int main(void)
assert(parse_wireaddr("[::ffff:127.0.0.1]:49150", &addr, 1, false, NULL));
assert(addr.port == 49150);
assert(parse_wireaddr("4ruvswpqec5i2gogopxl4vm5bruzknbvbylov2awbo4rxiq4cimdldad.onion:49150", &addr, 1, false, NULL));
assert(parse_wireaddr("4ruvswpqec5i2gogopxl4vm5bruzknbvbylov2awbo4rxiq4cimdldad.onion:49150", &addr, 1, false, NULL));
assert(addr.port == 49150);
assert(parse_wireaddr("4ruvswpqec5i2gogopxl4vm5bruzknbvbylov2awbo4rxiq4cimdldad.onion", &addr, 1, false, NULL));
@ -115,6 +116,11 @@ int main(void)
assert(parse_wireaddr("odpzvneidqdf5hdq.onion", &addr, 1, false, NULL));
assert(addr.port == 1);
assert(wireaddr_from_hostname(&addresses, "odpzvneidqdf5hdq.onion", 1, NULL, NULL, NULL));
assert(! wireaddr_from_hostname(&addresses, "aaa.onion", 1, NULL, NULL, NULL));
tal_free(addresses);
tal_free(tmpctx);
return 0;
}

View File

@ -308,19 +308,21 @@ bool wireaddr_from_hostname(struct wireaddr **addrs, const char *hostname,
if (strends(hostname, ".onion")) {
u8 *dec = b32_decode(tmpctx, hostname,
strlen(hostname) - strlen(".onion"));
if (tal_count(*addrs) == 0)
tal_resize(addrs, 1);
if (tal_count(dec) == TOR_V2_ADDRLEN)
addrs[0]->type = ADDR_TYPE_TOR_V2;
(*addrs)[0].type = ADDR_TYPE_TOR_V2;
else if (tal_count(dec) == TOR_V3_ADDRLEN)
addrs[0]->type = ADDR_TYPE_TOR_V3;
(*addrs)[0].type = ADDR_TYPE_TOR_V3;
else {
if (err_msg)
*err_msg = "Invalid Tor address";
return false;
}
addrs[0]->addrlen = tal_count(dec);
addrs[0]->port = port;
memcpy(&addrs[0]->addr, dec, tal_count(dec));
(*addrs)[0].addrlen = tal_count(dec);
(*addrs)[0].port = port;
memcpy((*addrs)[0].addr, dec, tal_count(dec));
return true;
}