about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-09-05 02:50:38 -0400
committerRich Felker <dalias@aerifal.cx>2014-09-05 02:50:38 -0400
commit80e6485455a9c75c029d0e976d2dd9c8e441dd72 (patch)
tree659d4632ef956f2bebed3509e97715f255afb8d5
parent6e2bb7acf42589fb7130b039d0623e2ca42503dd (diff)
downloadmusl-80e6485455a9c75c029d0e976d2dd9c8e441dd72.tar.gz
musl-80e6485455a9c75c029d0e976d2dd9c8e441dd72.tar.xz
musl-80e6485455a9c75c029d0e976d2dd9c8e441dd72.zip
remove an extra layer of buffer copying in getnameinfo reverse dns
the outer getnameinfo function already has a properly-sized temporary
buffer for storing the reverse dns (ptr) result. there is no reason
for the callback to use a secondary buffer and copy it on success, and
doing so potentially expanded the impact of the dn_expand bug that was
fixed in commit 49d2c8c6bcf8c926e52c7f510033b6adc31355f5.

this change reduces the code size by a small amount, and also reduces
the run-time stack space requirements by about 256 bytes.
-rw-r--r--src/network/getnameinfo.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/network/getnameinfo.c b/src/network/getnameinfo.c
index 588ed765..2ba66e33 100644
--- a/src/network/getnameinfo.c
+++ b/src/network/getnameinfo.c
@@ -113,11 +113,10 @@ static void reverse_services(char *buf, int port, int dgram)
 
 static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet)
 {
-	char tmp[256];
 	if (rr != RR_PTR) return 0;
 	if (__dn_expand(packet, (const unsigned char *)packet + 512,
-	    data, tmp, sizeof tmp) > 0)
-		strcpy(c, tmp);
+	    data, c, 256) <= 0)
+		*(char *)c = 0;
 	return 0;
 	
 }