Fix error code for too small input buffer to getnameinfo

This commit is contained in:
Ulrich Drepper 2011-12-22 19:21:36 -05:00
parent e7f9dac362
commit 27deeafc3f
3 changed files with 14 additions and 9 deletions

View File

@ -1,5 +1,9 @@
2011-12-22 Ulrich Drepper <drepper@gmail.com> 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 * sysdeps/i386/fpu/bits/fenv.h [__SSE_MATH__]: Add feraiseexcept
optimization. optimization.

8
NEWS
View File

@ -11,10 +11,10 @@ Version 2.15
6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874, 6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090, 12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13185, 13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13166, 13179,
13189, 13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335, 13337, 13185, 13189, 13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335,
13344, 13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472, 13484, 13337, 13344, 13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472,
13506, 13515, 13523, 13524, 13538, 13540 13484, 13506, 13515, 13523, 13524, 13538, 13540
* New program pldd to list loaded object of a process * New program pldd to list loaded object of a process
Implemented by Ulrich Drepper. Implemented by Ulrich Drepper.

View File

@ -346,10 +346,11 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
"%u", scopeid); "%u", scopeid);
if (real_hostlen + scopelen + 1 > hostlen) if (real_hostlen + scopelen + 1 > hostlen)
/* XXX We should not fail here. Simply enlarge /* Signal the buffer is too small. This is
the buffer or return with out of memory. */ what inet_ntop does. */
return EAI_SYSTEM; c = NULL;
memcpy (host + real_hostlen, scopebuf, scopelen + 1); else
memcpy (host + real_hostlen, scopebuf, scopelen + 1);
} }
} }
else else
@ -357,7 +358,7 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
(const void *) &(((const struct sockaddr_in *) sa)->sin_addr), (const void *) &(((const struct sockaddr_in *) sa)->sin_addr),
host, hostlen); host, hostlen);
if (c == NULL) if (c == NULL)
return EAI_SYSTEM; return EAI_OVERFLOW;
} }
ok = 1; ok = 1;
} }