Re: [PATCH v3] ss: Enclose IPv6 address in brackets
From: Phil Sutter <phil@nwl.cc>
Date: 2017-08-01 14:11:13
On Tue, Aug 01, 2017 at 12:05:13PM +0200, Florian Lehner wrote: [...]
quoted hunk ↗ jump to hunk
@@ -114,9 +114,13 @@ int addr64_n2a(__u64 addr, char *buff, size_t len); int af_bit_len(int af); int af_byte_len(int af); -const char *format_host_r(int af, int len, const void *addr, - char *buf, int buflen); -const char *format_host(int af, int lne, const void *addr); +const char *format_host_rb(int af, int len, const void *addr, + char *buf, int buflen, bool *resolved); +#define format_host_r(af, len, addr, buf, buflen) \ + format_host_rb(af, len, addr, buf, buflen, NULL) +const char *format_host_b(int af, int lne, const void *addr, bool*resolved); +#define format_host(af, lne, addr) \ + format_host_b(af, lne, addr, NULL) #define format_host_rta(af, rta) \ format_host(af, RTA_PAYLOAD(rta), RTA_DATA(rta)) const char *rt_addr_n2a_r(int af, int len, const void *addr,diff --git a/lib/utils.c b/lib/utils.c index 9aa3219..42c3bf5 100644 --- a/lib/utils.c +++ b/lib/utils.c@@ -898,8 +898,8 @@ static const char *resolve_address(const void *addr,int len, int af) } #endif -const char *format_host_r(int af, int len, const void *addr, - char *buf, int buflen) +const char *format_host_rb(int af, int len, const void *addr, + char *buf, int buflen, bool *resolved) { #ifdef RESOLVE_HOSTNAMES if (resolve_hosts) {@@ -909,17 +909,20 @@ const char *format_host_r(int af, int len, constvoid *addr, if (len > 0 && (n = resolve_address(addr, len, af)) != NULL) + { + *resolved = true; return n; + } } #endif return rt_addr_n2a_r(af, len, addr, buf, buflen); }
Did you test that? I guess calling format_host() will lead to dereference of a NULL pointer. Cheers, Phil