address/resolve: try harder to avoid returning uninitialised data

Cleanup after 30721.
This commit is contained in:
teor 2019-06-13 21:14:36 +10:00 committed by Nick Mathewson
parent fb93646c1c
commit 308d300213
2 changed files with 18 additions and 3 deletions

View file

@ -1760,6 +1760,13 @@ tor_addr_port_parse(int severity, const char *addrport,
retval = 0; retval = 0;
done: done:
/* Clear the address and port on error, to avoid returning uninitialised or
* partly parsed data.
*/
if (retval == -1) {
memset(address_out, 0, sizeof(tor_addr_t));
*port_out = 0;
}
tor_free(addr_tmp); tor_free(addr_tmp);
return retval; return retval;
} }
@ -1828,7 +1835,6 @@ tor_addr_port_split(int severity, const char *addrport,
tor_free(address_); tor_free(address_);
} }
if (port_out)
*port_out = ok ? ((uint16_t) port_) : 0; *port_out = ok ? ((uint16_t) port_) : 0;
return ok ? 0 : -1; return ok ? 0 : -1;

View file

@ -47,6 +47,11 @@ tor_lookup_hostname,(const char *name, uint32_t *addr))
tor_addr_t myaddr; tor_addr_t myaddr;
int ret; int ret;
if (BUG(!addr))
return -1;
*addr = 0;
if ((ret = tor_addr_lookup(name, AF_INET, &myaddr))) if ((ret = tor_addr_lookup(name, AF_INET, &myaddr)))
return ret; return ret;
@ -250,7 +255,7 @@ int
tor_addr_port_lookup(const char *s, tor_addr_t *addr_out, uint16_t *port_out) tor_addr_port_lookup(const char *s, tor_addr_t *addr_out, uint16_t *port_out)
{ {
tor_addr_t addr; tor_addr_t addr;
uint16_t portval; uint16_t portval = 0;
char *tmp = NULL; char *tmp = NULL;
int rv = 0; int rv = 0;
@ -273,6 +278,10 @@ tor_addr_port_lookup(const char *s, tor_addr_t *addr_out, uint16_t *port_out)
return 0; return 0;
err: err:
/* Clear the address and port on error */
memset(addr_out, 0, sizeof(tor_addr_t));
if (port_out)
*port_out = 0;
tor_free(tmp); tor_free(tmp);
return -1; return -1;
} }