]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
lib/env.c: Replace strncpy(3) call by stpcpy(mempcpy(), "")
authorAlejandro Colomar <alx@kernel.org>
Wed, 15 Nov 2023 21:49:13 +0000 (22:49 +0100)
committerSerge Hallyn <serge@hallyn.com>
Mon, 4 Dec 2023 04:24:29 +0000 (22:24 -0600)
We were using strncpy(3), which is designed to copy from a string into a
(null-padded) fixed-size character array.  However, we were doing the
opposite: copying from a known-size array (which was a prefix of a
string), into a string.  That's why we had to manually zero the buffer
afterwards.

Use instead mempcpy(3) to copy the non-null bytes, and then terminate
with a null byte with stpcpy(..., "").

Cc: "Serge E. Hallyn" <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
lib/env.c

index dc35c54d9dff027138faef17ad8e71c16a44429a..6d6b1370ca4f51e6c6819abce34177801a3b1c79 100644 (file)
--- a/lib/env.c
+++ b/lib/env.c
@@ -192,8 +192,7 @@ void set_env (int argc, char *const *argv)
                        }
 
                        if (NULL != *p) {
-                               strncpy (variable, *argv, (size_t)(cp - *argv));
-                               variable[cp - *argv] = '\0';
+                               stpcpy(mempcpy(variable, *argv, (size_t)(cp - *argv)), "");
                                printf (_("You may not change $%s\n"),
                                        variable);
                                continue;