diff --git a/common/test/run-ip_port_parsing.c b/common/test/run-ip_port_parsing.c index 2217774f2..953a6b54a 100644 --- a/common/test/run-ip_port_parsing.c +++ b/common/test/run-ip_port_parsing.c @@ -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; } diff --git a/common/wireaddr.c b/common/wireaddr.c index 9a0643c66..80d9c25b0 100644 --- a/common/wireaddr.c +++ b/common/wireaddr.c @@ -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; }