Fix error code for too small input buffer to getnameinfo
authorUlrich Drepper <drepper@gmail.com>
Fri, 23 Dec 2011 00:21:36 +0000 (19:21 -0500)
committerUlrich Drepper <drepper@gmail.com>
Fri, 23 Dec 2011 00:21:36 +0000 (19:21 -0500)
ChangeLog
NEWS
inet/getnameinfo.c

index e650d53..d49f945 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2011-12-22  Ulrich Drepper  <drepper@gmail.com>
 
+       [BZ #13166]
+       * inet/getnameinfo.c (getnameinfo): Return EAI_OVERFLOW if the
+       buffer for the output is too small.
+
        * sysdeps/i386/fpu/bits/fenv.h [__SSE_MATH__]: Add feraiseexcept
        optimization.
 
diff --git a/NEWS b/NEWS
index ea946e3..fe57b58 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,10 +11,10 @@ Version 2.15
 
   6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
   12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
-  13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13185,
-  13189, 13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335, 13337,
-  13344, 13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472, 13484,
-  13506, 13515, 13523, 13524, 13538, 13540
+  13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13166, 13179,
+  13185, 13189, 13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335,
+  13337, 13344, 13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472,
+  13484, 13506, 13515, 13523, 13524, 13538, 13540
 
 * New program pldd to list loaded object of a process
   Implemented by Ulrich Drepper.
index 6fb6ad6..436604b 100644 (file)
@@ -346,10 +346,11 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
                                                     "%u", scopeid);
 
                        if (real_hostlen + scopelen + 1 > hostlen)
-                         /* XXX We should not fail here.  Simply enlarge
-                            the buffer or return with out of memory.  */
-                         return EAI_SYSTEM;
-                       memcpy (host + real_hostlen, scopebuf, scopelen + 1);
+                         /* Signal the buffer is too small.  This is
+                            what inet_ntop does.  */
+                         c = NULL;
+                       else
+                         memcpy (host + real_hostlen, scopebuf, scopelen + 1);
                      }
                  }
                else
@@ -357,7 +358,7 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
                                 (const void *) &(((const struct sockaddr_in *) sa)->sin_addr),
                                 host, hostlen);
                if (c == NULL)
-                 return EAI_SYSTEM;
+                 return EAI_OVERFLOW;
              }
            ok = 1;
          }