Commit d8e24684 authored by rl1987's avatar rl1987 Committed by rl1987
Browse files

Check for possible failures of tor_inet_ntop/tor_inet_ntoa in fmt_addr32 and tor_dup_ip

parent b5bfdbfd
......@@ -1196,14 +1196,24 @@ fmt_addrport(const tor_addr_t *addr, uint16_t port)
/** Like fmt_addr(), but takes <b>addr</b> as a host-order IPv4
* addresses. Also not thread-safe, also clobbers its return buffer on
* repeated calls. */
* repeated calls. Clean internal buffer and return empty string on failure. */
const char *
fmt_addr32(uint32_t addr)
static char buf[INET_NTOA_BUF_LEN];
struct in_addr in;
int success;
in.s_addr = htonl(addr);
tor_inet_ntoa(&in, buf, sizeof(buf));
success = tor_inet_ntoa(&in, buf, sizeof(buf));
tor_assertf_nonfatal(success > 0,
"Failed to convert IP %04X to string", addr);
if (success <= 0) {
memset(buf, 0, INET_NTOA_BUF_LEN);
return buf;
......@@ -1995,17 +2005,24 @@ parse_port_range(const char *port, uint16_t *port_min_out,
/** Given a host-order <b>addr</b>, call tor_inet_ntop() on it
* and return a strdup of the resulting address.
* and return a strdup of the resulting address. Return NULL if
* tor_inet_ntop() fails.
char *
tor_dup_ip(uint32_t addr)
const char *ip_str;
char buf[TOR_ADDR_BUF_LEN];
struct in_addr in;
in.s_addr = htonl(addr);
tor_inet_ntop(AF_INET, &in, buf, sizeof(buf));
return tor_strdup(buf);
ip_str = tor_inet_ntop(AF_INET, &in, buf, sizeof(buf));
tor_assertf_nonfatal(ip_str, "Failed to duplicate IP %04X", addr);
if (ip_str)
return tor_strdup(buf);
return NULL;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment