[git commit] ash: placate -Werror=format-security

Denys Vlasenko vda.linux at googlemail.com
Thu Feb 18 12:45:49 UTC 2021


commit: https://git.busybox.net/busybox/commit/?id=33745b1fc8cc6d41f4e708d67800d296668af2ce
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

"In function 'sprint_status48':
 error: format not a string literal and no format arguments"

function                                             old     new   delta
sprint_status48                                      160     158      -2

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 include/platform.h |  8 ++++++++
 libbb/platform.c   | 12 ++++++++++++
 shell/ash.c        |  4 +---
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/include/platform.h b/include/platform.h
index d991f3140..24efd186b 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -407,6 +407,7 @@ typedef unsigned smalluint;
 #define HAVE_SETBIT 1
 #define HAVE_SIGHANDLER_T 1
 #define HAVE_STPCPY 1
+#define HAVE_STPNCPY 1
 #define HAVE_MEMPCPY 1
 #define HAVE_STRCASESTR 1
 #define HAVE_STRCHRNUL 1
@@ -442,6 +443,7 @@ typedef unsigned smalluint;
 # undef HAVE_MKDTEMP
 # undef HAVE_SETBIT
 # undef HAVE_STPCPY
+# undef HAVE_STPNCPY
 # undef HAVE_STRCASESTR
 # undef HAVE_STRCHRNUL
 # undef HAVE_STRSEP
@@ -514,6 +516,7 @@ typedef unsigned smalluint;
 
 #if defined(__digital__) && defined(__unix__)
 # undef HAVE_STPCPY
+# undef HAVE_STPNCPY
 #endif
 
 #if defined(ANDROID) || defined(__ANDROID__)
@@ -530,6 +533,7 @@ typedef unsigned smalluint;
 #  undef HAVE_TTYNAME_R
 #  undef HAVE_GETLINE
 #  undef HAVE_STPCPY
+#  undef HAVE_STPNCPY
 # endif
 # undef HAVE_MEMPCPY
 # undef HAVE_STRCHRNUL
@@ -574,6 +578,10 @@ typedef void (*sighandler_t)(int);
 extern char *stpcpy(char *p, const char *to_add) FAST_FUNC;
 #endif
 
+#ifndef HAVE_STPNCPY
+extern char *stpncpy(char *p, const char *to_add, size_t n) FAST_FUNC;
+#endif
+
 #ifndef HAVE_MEMPCPY
 #include <string.h>
 /* In case we are wrong about !HAVE_MEMPCPY, and toolchain _does_ have
diff --git a/libbb/platform.c b/libbb/platform.c
index 329b0237e..7913353e2 100644
--- a/libbb/platform.c
+++ b/libbb/platform.c
@@ -166,6 +166,18 @@ char* FAST_FUNC stpcpy(char *p, const char *to_add)
 }
 #endif
 
+#ifndef HAVE_STPNCPY
+char* FAST_FUNC stpncpy(char *p, const char *to_add, size_t n)
+{
+	while (n != 0 && (*p = *to_add) != '\0') {
+		p++;
+		to_add++;
+		n--;
+	}
+	return p;
+}
+#endif
+
 #ifndef HAVE_GETLINE
 ssize_t FAST_FUNC getline(char **lineptr, size_t *n, FILE *stream)
 {
diff --git a/shell/ash.c b/shell/ash.c
index 1aead6df4..6a16833b1 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -4263,9 +4263,7 @@ sprint_status48(char *os, int status, int sigonly)
 #endif
 		}
 		st &= 0x7f;
-//TODO: use bbox's get_signame? strsignal adds ~600 bytes to text+rodata
-		//s = stpncpy(s, strsignal(st), 32); //not all libc have stpncpy()
-		s += fmtstr(s, 32, strsignal(st));
+		s = stpncpy(s, strsignal(st), 32);
 		if (WCOREDUMP(status)) {
 			s = stpcpy(s, " (core dumped)");
 		}


More information about the busybox-cvs mailing list