From 27deeafc3fcb12e2873f05be5c41ccfc6f7b08e8 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 22 Dec 2011 19:21:36 -0500 Subject: [PATCH] Fix error code for too small input buffer to getnameinfo --- ChangeLog | 4 ++++ NEWS | 8 ++++---- inet/getnameinfo.c | 11 ++++++----- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index e650d53..d49f945 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-12-22 Ulrich Drepper + [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 --- 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. diff --git a/inet/getnameinfo.c b/inet/getnameinfo.c index 6fb6ad6..436604b 100644 --- a/inet/getnameinfo.c +++ b/inet/getnameinfo.c @@ -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; } -- 2.7.4