Subject: [PATCH 5/5] Prevent tmpbuf from overrunning

[PATCH 5/5] Prevent tmpbuf from overrunning

From: Gregor Jasny <gjasny_at_googlemail.com>
Date: Sun, 28 Sep 2014 22:19:27 +0200

Fix Coverity error CID 56886.

Signed-off-by: Gregor Jasny <gjasny_at_googlemail.com>

---
 ares_getnameinfo.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/ares_getnameinfo.c b/ares_getnameinfo.c
index 5b9f638..b0bc6da 100644
--- a/ares_getnameinfo.c
+++ b/ares_getnameinfo.c
@@ -281,6 +281,8 @@ static char *lookup_service(unsigned short port, int flags,
   struct servent se;
 #endif
   char tmpbuf[4096];
+  char *name;
+  size_t name_len;
 
   if (port)
     {
@@ -323,14 +325,20 @@ static char *lookup_service(unsigned short port, int flags,
 #endif
         }
       if (sep && sep->s_name)
-        /* get service name */
-        strcpy(tmpbuf, sep->s_name);
+        {
+          /* get service name */
+          name = sep->s_name;
+        }
       else
-        /* get port as a string */
-        sprintf(tmpbuf, "%u", (unsigned int)ntohs(port));
-      if (strlen(tmpbuf) < buflen)
+        {
+          /* get port as a string */
+          sprintf(tmpbuf, "%u", (unsigned int)ntohs(port));
+          name = tmpbuf;
+        }
+      name_len = strlen(name);
+      if (name_len < buflen)
         /* return it if buffer big enough */
-        strcpy(buf, tmpbuf);
+        memcpy(buf, name, name_len + 1);
       else
         /* avoid reusing previous one */
         buf[0] = '\0';
-- 
1.9.3 (Apple Git-50)
Received on 2014-09-28