diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | sysdeps/mach/hurd/getlogin_r.c | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 560bb95533..f50bf6f27f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,6 +13,10 @@ * sysdeps/mach/hurd/getgroups.c: Return -1 and set EINVAL for negative N or less than NGIDS. + * sysdeps/mach/hurd/getlogin_r.c: Make LOGIN non-static and change its + type to string_t. Set ERANGE as errno and return it if NAME is not big + enough. Use memcpy instead of strncpy. + 2012-07-20 Joseph Myers <joseph@codesourcery.com> * elf/Makefile (check-data): Remove. diff --git a/sysdeps/mach/hurd/getlogin_r.c b/sysdeps/mach/hurd/getlogin_r.c index 2539e6b0a0..5410709e71 100644 --- a/sysdeps/mach/hurd/getlogin_r.c +++ b/sysdeps/mach/hurd/getlogin_r.c @@ -29,13 +29,20 @@ getlogin_r (name, name_len) char *name; size_t name_len; { - static char login[1024]; /* XXX */ + string_t login; error_t err; if (err = __USEPORT (PROC, __proc_getlogin (port, login))) return errno = err; - strncpy (name, login, name_len); + size_t len = __strnlen (login, sizeof login - 1) + 1; + if (len > name_len) + { + errno = ERANGE; + return errno; + } + + memcpy (name, login, len); return 0; } libc_hidden_def (getlogin_r) |