Merge branch 'philmd' into 'master'
Remove alloca() call in get_dns_addr_resolv_conf()
See merge request slirp/libslirp!84
diff --git a/src/slirp.c b/src/slirp.c
index ee4ce36..5d60cb5 100644
--- a/src/slirp.c
+++ b/src/slirp.c
@@ -249,9 +249,13 @@
char buff2[257];
FILE *f;
int found = 0;
- void *tmp_addr = alloca(addrlen);
+ union {
+ struct in_addr dns_addr;
+ struct in6_addr dns6_addr;
+ } tmp_addr;
unsigned if_index;
+ assert(sizeof(tmp_addr) >= addrlen);
f = fopen("/etc/resolv.conf", "r");
if (!f)
return -1;
@@ -267,13 +271,13 @@
if_index = 0;
}
- if (!inet_pton(af, buff2, tmp_addr)) {
+ if (!inet_pton(af, buff2, &tmp_addr)) {
continue;
}
/* If it's the first one, set it to dns_addr */
if (!found) {
- memcpy(pdns_addr, tmp_addr, addrlen);
- memcpy(cached_addr, tmp_addr, addrlen);
+ memcpy(pdns_addr, &tmp_addr, addrlen);
+ memcpy(cached_addr, &tmp_addr, addrlen);
if (scope_id) {
*scope_id = if_index;
}
@@ -285,7 +289,7 @@
break;
} else if (slirp_debug & DBG_MISC) {
char s[INET6_ADDRSTRLEN];
- const char *res = inet_ntop(af, tmp_addr, s, sizeof(s));
+ const char *res = inet_ntop(af, &tmp_addr, s, sizeof(s));
if (!res) {
res = " (string conversion error)";
}