remove an extra layer of buffer copying in getnameinfo reverse dns
authorRich Felker <dalias@aerifal.cx>
Fri, 5 Sep 2014 06:50:38 +0000 (02:50 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 5 Sep 2014 06:50:38 +0000 (02:50 -0400)
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.

src/network/getnameinfo.c

index 588ed7650a09307dd108f4a1a58311d6d58151b6..2ba66e33d75c7d5ef91610b10fff794de58fcf0e 100644 (file)
@@ -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;
        
 }