From 5ae958d74180e2572d198bd7872c86f391de6da7 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 5 May 2010 09:44:50 -0700 Subject: Handle too-small buffers in Linux getlogin_r. --- sysdeps/unix/sysv/linux/getlogin_r.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'sysdeps') diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c index d9c66fe259..dad2671e80 100644 --- a/sysdeps/unix/sysv/linux/getlogin_r.c +++ b/sysdeps/unix/sysv/linux/getlogin_r.c @@ -81,13 +81,22 @@ __getlogin_r_loginuid (name, namesize) if (tpwd == NULL) goto fail; - strncpy (name, pwd.pw_name, namesize - 1); - name[namesize - 1] = '\0'; - + int result = 0; + size_t needed = strlen (pwd.pw_name) + 1; + if (needed > namesize) + { + __set_errno (ERANGE); + result = ERANGE; + goto out; + } + + memcpy (name, pwd.pw_name, needed); + + out: if (use_malloc) free (buf); - return 0; + return result; } -- cgit v1.2.3