summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-12-22 19:21:36 -0500
committerUlrich Drepper <drepper@gmail.com>2011-12-22 19:21:36 -0500
commit27deeafc3fcb12e2873f05be5c41ccfc6f7b08e8 (patch)
treef563a17e2ddd22e6b51644b99f12ed958bba758d
parente7f9dac36202cf09e1b4f5f89c56cc12a29ce9f6 (diff)
Fix error code for too small input buffer to getnameinfo
-rw-r--r--ChangeLog4
-rw-r--r--NEWS8
-rw-r--r--inet/getnameinfo.c11
3 files changed, 14 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index e650d53099..d49f945bb0 100644
--- 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 ea946e3a58..fe57b58520 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 6fb6ad6e1d..436604b756 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;
}