cuserid: don't return truncated results
authorRich Felker <dalias@aerifal.cx>
Sat, 13 Feb 2021 18:54:00 +0000 (13:54 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 13 Feb 2021 18:59:09 +0000 (13:59 -0500)
checking the length also drops the need to pull in snprintf.

src/legacy/cuserid.c

index fd7832e..3ff115a 100644 (file)
@@ -2,6 +2,7 @@
 #include <pwd.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <string.h>
 
 char *cuserid(char *buf)
 {
@@ -10,7 +11,10 @@ char *cuserid(char *buf)
        long pwb[256];
        if (getpwuid_r(geteuid(), &pw, (void *)pwb, sizeof pwb, &ppw))
                return 0;
+       size_t len = strnlen(pw.pw_name, L_cuserid);
+       if (len == L_cuserid)
+               return 0;
        if (!buf) buf = usridbuf;
-       snprintf(buf, L_cuserid, "%s", pw.pw_name);
+       memcpy(buf, pw.pw_name, len+1);
        return buf;
 }