diff options
author | 2017-03-17 14:59:01 +0000 | |
---|---|---|
committer | 2017-03-17 14:59:01 +0000 | |
commit | 92137d55a19deff593e792ca056ec69732a3bbe7 (patch) | |
tree | 0c05d0f925f14aa0265d672e64f7d527c589aec3 | |
parent | Use recallocarray() to avoid leaving detritus in memory when resizing (diff) | |
download | wireguard-openbsd-92137d55a19deff593e792ca056ec69732a3bbe7.tar.xz wireguard-openbsd-92137d55a19deff593e792ca056ec69732a3bbe7.zip |
choose_server() does not always return malloc'd memory so pass
in a pointer that gets filled in when there is something to free.
Noticed by sthen@ when looking up a numeric address.
-rw-r--r-- | usr.bin/whois/whois.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/usr.bin/whois/whois.c b/usr.bin/whois/whois.c index 8fdadb1f24c..907d102b2f8 100644 --- a/usr.bin/whois/whois.c +++ b/usr.bin/whois/whois.c @@ -1,4 +1,4 @@ -/* $OpenBSD: whois.c,v 1.54 2017/03/15 16:45:25 millert Exp $ */ +/* $OpenBSD: whois.c,v 1.55 2017/03/17 14:59:01 millert Exp $ */ /* * Copyright (c) 1980, 1993 @@ -73,13 +73,13 @@ const char *ip_whois[] = { LNICHOST, RNICHOST, PNICHOST, BNICHOST, __dead void usage(void); int whois(const char *, const char *, const char *, int); -char *choose_server(const char *, const char *); +char *choose_server(const char *, const char *, char **); int main(int argc, char *argv[]) { int ch, flags, rval; - char *host, *name, *country, *server; + char *host, *name, *country; country = host = NULL; flags = rval = 0; @@ -148,10 +148,11 @@ main(int argc, char *argv[]) if (host == NULL && country == NULL && !(flags & WHOIS_QUICK)) flags |= WHOIS_RECURSE; for (name = *argv; (name = *argv) != NULL; argv++) { - server = host ? host : choose_server(name, country); + char *tofree = NULL; + const char *server = + host ? host : choose_server(name, country, &tofree); rval += whois(name, server, port_whois, flags); - if (host == NULL) - free(server); + free(tofree); } return (rval); } @@ -280,7 +281,7 @@ whois(const char *query, const char *server, const char *port, int flags) * ASN (starts with AS). Fall back to NICHOST for the non-handle case. */ char * -choose_server(const char *name, const char *country) +choose_server(const char *name, const char *country, char **tofree) { char *server; const char *qhead; @@ -336,6 +337,7 @@ choose_server(const char *name, const char *country) err(1, NULL); } + *tofree = server; return (server); } |