From 924bc0b9a7bb8dc738009001f796407bd26351ef Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Tue, 17 Nov 2020 13:18:01 +0100 Subject: [PATCH 01/33] common/common.c: snprintfcat(): do not warn about nonliteral format string in this case --- common/common.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common/common.c b/common/common.c index 84c5e39087..30803dd5ec 100644 --- a/common/common.c +++ b/common/common.c @@ -300,7 +300,16 @@ int snprintfcat(char *dst, size_t size, const char *fmt, ...) assert(len <= size); va_start(ap, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif + /* Note: this code intentionally uses a caller-provided format string */ ret = vsnprintf(dst + len, size - len, fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(ap); dst[size] = '\0'; From 19f3a363a2f57c5ec4b8309a3ba05a66126c4a5d Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Fri, 20 Nov 2020 19:35:30 +0100 Subject: [PATCH 02/33] common/common.c: various routines: do not warn about nonliteral format string in these cases --- common/common.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/common/common.c b/common/common.c index 30803dd5ec..3cd07c08ed 100644 --- a/common/common.c +++ b/common/common.c @@ -350,7 +350,15 @@ static void vupslog(int priority, const char *fmt, va_list va, int use_strerror) int ret; char buf[LARGEBUF]; +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif ret = vsnprintf(buf, sizeof(buf), fmt, va); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif if ((ret < 0) || (ret >= (int) sizeof(buf))) syslog(LOG_WARNING, "vupslog: vsnprintf needed more than %d bytes", @@ -437,7 +445,15 @@ void upslog_with_errno(int priority, const char *fmt, ...) va_list va; va_start(va, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vupslog(priority, fmt, va, 1); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(va); } @@ -447,7 +463,15 @@ void upslogx(int priority, const char *fmt, ...) va_list va; va_start(va, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vupslog(priority, fmt, va, 0); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(va); } @@ -476,7 +500,15 @@ void upsdebug_with_errno(int level, const char *fmt, ...) } va_start(va, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vupslog(LOG_DEBUG, fmt, va, 1); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(va); } @@ -501,7 +533,15 @@ void upsdebugx(int level, const char *fmt, ...) } va_start(va, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vupslog(LOG_DEBUG, fmt, va, 0); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(va); } @@ -598,7 +638,15 @@ static void vfatal(const char *fmt, va_list va, int use_strerror) if (xbit_test(upslog_flags, UPSLOG_SYSLOG_ON_FATAL)) xbit_set(&upslog_flags, UPSLOG_SYSLOG); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vupslog(LOG_ERR, fmt, va, use_strerror); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif } void fatal_with_errno(int status, const char *fmt, ...) @@ -606,7 +654,15 @@ void fatal_with_errno(int status, const char *fmt, ...) va_list va; va_start(va, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vfatal(fmt, va, (errno > 0) ? 1 : 0); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(va); exit(status); @@ -617,7 +673,15 @@ void fatalx(int status, const char *fmt, ...) va_list va; va_start(va, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vfatal(fmt, va, 0); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(va); exit(status); From 7acde9b09a6f2836e4bd50948731bafad75ad54a Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 02:59:05 +0100 Subject: [PATCH 03/33] common/common.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- common/common.c | 72 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/common/common.c b/common/common.c index 3cd07c08ed..a50890813c 100644 --- a/common/common.c +++ b/common/common.c @@ -300,14 +300,18 @@ int snprintfcat(char *dst, size_t size, const char *fmt, ...) assert(len <= size); va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif /* Note: this code intentionally uses a caller-provided format string */ ret = vsnprintf(dst + len, size - len, fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(ap); @@ -350,13 +354,17 @@ static void vupslog(int priority, const char *fmt, va_list va, int use_strerror) int ret; char buf[LARGEBUF]; -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif ret = vsnprintf(buf, sizeof(buf), fmt, va); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -445,13 +453,17 @@ void upslog_with_errno(int priority, const char *fmt, ...) va_list va; va_start(va, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vupslog(priority, fmt, va, 1); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(va); @@ -463,13 +475,17 @@ void upslogx(int priority, const char *fmt, ...) va_list va; va_start(va, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vupslog(priority, fmt, va, 0); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(va); @@ -500,13 +516,17 @@ void upsdebug_with_errno(int level, const char *fmt, ...) } va_start(va, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vupslog(LOG_DEBUG, fmt, va, 1); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(va); @@ -533,13 +553,17 @@ void upsdebugx(int level, const char *fmt, ...) } va_start(va, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vupslog(LOG_DEBUG, fmt, va, 0); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(va); @@ -638,13 +662,17 @@ static void vfatal(const char *fmt, va_list va, int use_strerror) if (xbit_test(upslog_flags, UPSLOG_SYSLOG_ON_FATAL)) xbit_set(&upslog_flags, UPSLOG_SYSLOG); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vupslog(LOG_ERR, fmt, va, use_strerror); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif } @@ -654,13 +682,17 @@ void fatal_with_errno(int status, const char *fmt, ...) va_list va; va_start(va, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vfatal(fmt, va, (errno > 0) ? 1 : 0); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(va); @@ -673,13 +705,17 @@ void fatalx(int status, const char *fmt, ...) va_list va; va_start(va, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vfatal(fmt, va, 0); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(va); From df6f49f5f1ad636e2418a71e5a9d7a1ec48eeccd Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 00:57:37 +0100 Subject: [PATCH 04/33] clients/upssched.c: send_to_one(): do not warn about nonliteral format string in this case --- clients/upssched.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/clients/upssched.c b/clients/upssched.c index 3c428012db..9e8640ff5f 100644 --- a/clients/upssched.c +++ b/clients/upssched.c @@ -339,7 +339,15 @@ static int send_to_one(conn_t *conn, const char *fmt, ...) char buf[US_SOCK_BUF_LEN]; va_start(ap, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vsnprintf(buf, sizeof(buf), fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(ap); ret = write(conn->fd, buf, strlen(buf)); From 81114c3321a2dc58a7d96a16b6ea47dbe17cec16 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 02:56:20 +0100 Subject: [PATCH 05/33] clients/upssched.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- clients/upssched.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/clients/upssched.c b/clients/upssched.c index 9e8640ff5f..e281af367f 100644 --- a/clients/upssched.c +++ b/clients/upssched.c @@ -339,13 +339,17 @@ static int send_to_one(conn_t *conn, const char *fmt, ...) char buf[US_SOCK_BUF_LEN]; va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vsnprintf(buf, sizeof(buf), fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(ap); From 514074e6dba0a73801b3574f01762f2b5eb2db46 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:00:08 +0100 Subject: [PATCH 06/33] drivers/dstate.c: various routines: do not warn about nonliteral format string in this case --- drivers/dstate.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/dstate.c b/drivers/dstate.c index 348890d668..e39a9a797c 100644 --- a/drivers/dstate.c +++ b/drivers/dstate.c @@ -173,7 +173,15 @@ static void send_to_all(const char *fmt, ...) conn_t *conn, *cnext; va_start(ap, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif ret = vsnprintf(buf, sizeof(buf), fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(ap); if (ret < 1) { @@ -202,7 +210,15 @@ static int send_to_one(conn_t *conn, const char *fmt, ...) char buf[ST_SOCK_BUF_LEN]; va_start(ap, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif ret = vsnprintf(buf, sizeof(buf), fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(ap); upsdebugx(2, "%s: sending %.*s", __func__, (int)strcspn(buf, "\n"), buf); @@ -669,7 +685,15 @@ int dstate_setinfo(const char *var, const char *fmt, ...) va_list ap; va_start(ap, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vsnprintf(value, sizeof(value), fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(ap); ret = state_setinfo(&dtree_root, var, value); @@ -688,7 +712,15 @@ int dstate_addenum(const char *var, const char *fmt, ...) va_list ap; va_start(ap, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif vsnprintf(value, sizeof(value), fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(ap); ret = state_addenum(dtree_root, var, value); From 29e09e472a4a4f77b0a94ab9728128dc1fcc46c2 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:00:56 +0100 Subject: [PATCH 07/33] drivers/dstate.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/dstate.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/drivers/dstate.c b/drivers/dstate.c index e39a9a797c..ceda899cf4 100644 --- a/drivers/dstate.c +++ b/drivers/dstate.c @@ -173,13 +173,17 @@ static void send_to_all(const char *fmt, ...) conn_t *conn, *cnext; va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif ret = vsnprintf(buf, sizeof(buf), fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(ap); @@ -210,13 +214,17 @@ static int send_to_one(conn_t *conn, const char *fmt, ...) char buf[ST_SOCK_BUF_LEN]; va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif ret = vsnprintf(buf, sizeof(buf), fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(ap); @@ -685,13 +693,17 @@ int dstate_setinfo(const char *var, const char *fmt, ...) va_list ap; va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vsnprintf(value, sizeof(value), fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(ap); @@ -712,13 +724,17 @@ int dstate_addenum(const char *var, const char *fmt, ...) va_list ap; va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif vsnprintf(value, sizeof(value), fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(ap); From b64b97a8e72e5a6fe871218d6296efbccdd33fc1 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:01:39 +0100 Subject: [PATCH 08/33] drivers/serial.c: do not warn about nonliteral format string in this case --- drivers/serial.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/serial.c b/drivers/serial.c index c2dd23fb77..a86e7ea46d 100644 --- a/drivers/serial.c +++ b/drivers/serial.c @@ -472,7 +472,15 @@ void ser_comm_fail(const char *fmt, ...) return; va_start(ap, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif ret = vsnprintf(why, sizeof(why), fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(ap); if ((ret < 1) || (ret >= (int) sizeof(why))) From 237e21cbce9845b6a55d69e896e5baccbf840bb9 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:05:05 +0100 Subject: [PATCH 09/33] drivers/serial.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/serial.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/serial.c b/drivers/serial.c index a86e7ea46d..398d0d1ef8 100644 --- a/drivers/serial.c +++ b/drivers/serial.c @@ -472,13 +472,17 @@ void ser_comm_fail(const char *fmt, ...) return; va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif ret = vsnprintf(why, sizeof(why), fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(ap); From 68c6d2357be7830fae7193a5a38cc4b3e1e7ee6a Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:02:58 +0100 Subject: [PATCH 10/33] drivers/bestfortress.c: do not warn about nonliteral format string in this case --- drivers/bestfortress.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/bestfortress.c b/drivers/bestfortress.c index 7348d2ea18..34e82a51ce 100644 --- a/drivers/bestfortress.c +++ b/drivers/bestfortress.c @@ -168,7 +168,15 @@ static int upssend(const char *fmt,...) { int d_usec = UPSDELAY; va_start(ap, fmt); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif ret = vsnprintf(buf, sizeof(buf), fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif va_end(ap); if ((ret < 1) || (ret >= (int) sizeof(buf))) From 2a7bdfa3fa7ada44207410ee8ac10160358c7985 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:05:36 +0100 Subject: [PATCH 11/33] drivers/bestfortress.c: setinfo_float(): comment about a casting problem, and do not warn about nonliteral format string in this case --- drivers/bestfortress.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/bestfortress.c b/drivers/bestfortress.c index 34e82a51ce..cf5d0222d8 100644 --- a/drivers/bestfortress.c +++ b/drivers/bestfortress.c @@ -157,7 +157,19 @@ static inline void setinfo_float (const char *key, const char * fmt, const char len = sizeof(buf)-1; strncpy (buf, s, len); buf[len] = 0; + +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif + /* FIXME (bitness-dependent?): + * error: cast from function call of type 'int' to non-matching type 'double' [-Werror,-Wbad-function-cast] + */ dstate_setinfo (key, fmt, factor * (double)atoi (buf)); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif } static int upssend(const char *fmt,...) { From 5955e09e42a855a6017b46483136d84c4c227d6b Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 02:59:56 +0100 Subject: [PATCH 12/33] drivers/bestfortress.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/bestfortress.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/bestfortress.c b/drivers/bestfortress.c index cf5d0222d8..ce98b586f3 100644 --- a/drivers/bestfortress.c +++ b/drivers/bestfortress.c @@ -158,16 +158,20 @@ static inline void setinfo_float (const char *key, const char * fmt, const char strncpy (buf, s, len); buf[len] = 0; -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif /* FIXME (bitness-dependent?): * error: cast from function call of type 'int' to non-matching type 'double' [-Werror,-Wbad-function-cast] */ dstate_setinfo (key, fmt, factor * (double)atoi (buf)); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif } @@ -180,13 +184,17 @@ static int upssend(const char *fmt,...) { int d_usec = UPSDELAY; va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif ret = vsnprintf(buf, sizeof(buf), fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif va_end(ap); From 4e713a993010e525b0acf76fea5ccd840840f034 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:09:26 +0100 Subject: [PATCH 13/33] drivers/mge-utalk.c: various routines: do not warn about nonliteral format string in this case --- drivers/mge-utalk.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/mge-utalk.c b/drivers/mge-utalk.c index e009a493bd..bf8ef7ee78 100644 --- a/drivers/mge-utalk.c +++ b/drivers/mge-utalk.c @@ -680,6 +680,11 @@ static void extract_info(const char *buf, const mge_info_item_t *item, /* initialize info string */ infostr[0] = '\0'; +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif /* write into infostr with proper formatting */ if ( strpbrk(item->fmt, "feEgG") ) { /* float */ snprintf(infostr, infolen, item->fmt, @@ -690,6 +695,9 @@ static void extract_info(const char *buf, const mge_info_item_t *item, } else { snprintf(infostr, infolen, item->fmt, buf); } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif } @@ -866,8 +874,15 @@ static int mge_command(char *reply, int replylen, const char *fmt, ...) /* build command string */ va_start(ap, fmt); - +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif ret = vsnprintf(command, sizeof(command), fmt, ap); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif if ((ret < 1) || (ret >= (int) sizeof(command))) upsdebugx(4, "mge_command: command truncated"); From 6ace1cd46474f3dfc42582536eb7fec46e690198 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:01:20 +0100 Subject: [PATCH 14/33] drivers/mge-utalk.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/mge-utalk.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/mge-utalk.c b/drivers/mge-utalk.c index bf8ef7ee78..46a0bd97e2 100644 --- a/drivers/mge-utalk.c +++ b/drivers/mge-utalk.c @@ -680,9 +680,13 @@ static void extract_info(const char *buf, const mge_info_item_t *item, /* initialize info string */ infostr[0] = '\0'; -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif /* write into infostr with proper formatting */ @@ -695,7 +699,7 @@ static void extract_info(const char *buf, const mge_info_item_t *item, } else { snprintf(infostr, infolen, item->fmt, buf); } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif } @@ -874,13 +878,17 @@ static int mge_command(char *reply, int replylen, const char *fmt, ...) /* build command string */ va_start(ap, fmt); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif ret = vsnprintf(command, sizeof(command), fmt, ap); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From 23b50e48cb742ba5fd4fe40c0569e6ff92833e3d Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:13:29 +0100 Subject: [PATCH 15/33] drivers/powerp-txt.c: do not warn about nonliteral format string in this case --- drivers/powerp-txt.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/powerp-txt.c b/drivers/powerp-txt.c index 7477af2bfd..cc5b6f0921 100644 --- a/drivers/powerp-txt.c +++ b/drivers/powerp-txt.c @@ -203,7 +203,15 @@ static int powpan_setvar(const char *varname, const char *val) return STAT_SET_HANDLED; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(command, sizeof(command), vartab[i].set, atoi(val)); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif if ((powpan_command(command) == 2) && (!strcasecmp(powpan_answer, "#0"))) { dstate_setinfo(varname, "%s", val); From 11cf32f268ad54453eb2ff42386d5498519726ed Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:04:50 +0100 Subject: [PATCH 16/33] drivers/powerp-txt.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/powerp-txt.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/powerp-txt.c b/drivers/powerp-txt.c index cc5b6f0921..3cfee7ff63 100644 --- a/drivers/powerp-txt.c +++ b/drivers/powerp-txt.c @@ -203,13 +203,17 @@ static int powpan_setvar(const char *varname, const char *val) return STAT_SET_HANDLED; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(command, sizeof(command), vartab[i].set, atoi(val)); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From f2eee148da7b0a8016a93e7a42e4b807bc63e87a Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:15:06 +0100 Subject: [PATCH 17/33] drivers/blazer.c: various routines: do not warn about nonliteral format string in these cases --- drivers/blazer.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/blazer.c b/drivers/blazer.c index c9592cc3fc..f3b0c595ff 100644 --- a/drivers/blazer.c +++ b/drivers/blazer.c @@ -211,7 +211,16 @@ static int blazer_status(const char *cmd) continue; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif dstate_setinfo(status[i].var, status[i].fmt, status[i].conv(val, NULL)); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif + } if (!val) { @@ -338,7 +347,16 @@ static int blazer_rating(const char *cmd) continue; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif dstate_setinfo(rating[i].var, rating[i].fmt, rating[i].conv(val, NULL)); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif + } return 0; From b5b98e25ab34d2e89b28561883e5226963e1aea9 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:00:24 +0100 Subject: [PATCH 18/33] drivers/blazer.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/blazer.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/blazer.c b/drivers/blazer.c index f3b0c595ff..12f7e5e223 100644 --- a/drivers/blazer.c +++ b/drivers/blazer.c @@ -211,13 +211,17 @@ static int blazer_status(const char *cmd) continue; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif dstate_setinfo(status[i].var, status[i].fmt, status[i].conv(val, NULL)); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -347,13 +351,17 @@ static int blazer_rating(const char *cmd) continue; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif dstate_setinfo(rating[i].var, rating[i].fmt, rating[i].conv(val, NULL)); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From 5115977a1adcdb5a9bd772aee785e9fac7138d9f Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:19:20 +0100 Subject: [PATCH 19/33] drivers/apcupsd-ups.c: do not warn about nonliteral format string in this case --- drivers/apcupsd-ups.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/apcupsd-ups.c b/drivers/apcupsd-ups.c index 32e2013a92..2042f21d09 100644 --- a/drivers/apcupsd-ups.c +++ b/drivers/apcupsd-ups.c @@ -133,9 +133,21 @@ static void process(char *item,char *data) data[(int)nut_data[i].info_len]=0; dstate_setinfo(nut_data[i].info_type,"%s",data); } - else dstate_setinfo(nut_data[i].info_type, - nut_data[i].default_value, - atof(data)*nut_data[i].info_len); + else + { +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif + /* default_value acts as a format string in this case */ + dstate_setinfo(nut_data[i].info_type, + nut_data[i].default_value, + atof(data)*nut_data[i].info_len); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif + } break; } } From ea82df0e383595d45e2c889eeea91a95be82f9f8 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 02:59:28 +0100 Subject: [PATCH 20/33] drivers/apcupsd-ups.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/apcupsd-ups.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/apcupsd-ups.c b/drivers/apcupsd-ups.c index 2042f21d09..02ec2efc1b 100644 --- a/drivers/apcupsd-ups.c +++ b/drivers/apcupsd-ups.c @@ -135,16 +135,20 @@ static void process(char *item,char *data) } else { -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif /* default_value acts as a format string in this case */ dstate_setinfo(nut_data[i].info_type, nut_data[i].default_value, atof(data)*nut_data[i].info_len); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif } From f7995486846667144e2881b59898e48bdee8a3cd Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:23:24 +0100 Subject: [PATCH 21/33] drivers/nutdrv_qx_bestups.c: various routines: do not warn about nonliteral format string in these cases --- drivers/nutdrv_qx_bestups.c | 60 +++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/drivers/nutdrv_qx_bestups.c b/drivers/nutdrv_qx_bestups.c index 6e311e6518..9bb74f69a0 100644 --- a/drivers/nutdrv_qx_bestups.c +++ b/drivers/nutdrv_qx_bestups.c @@ -372,7 +372,15 @@ static int bestups_process_setvar(item_t *item, char *value, const size_t valuel } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->command, val); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } @@ -407,6 +415,12 @@ static int bestups_process_bbb_status_bit(item_t *item, char *value, const size_ /* Identify UPS manufacturer */ static int bestups_manufacturer(item_t *item, char *value, const size_t valuelen) { +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif + /* Best Power devices */ if ( !strcmp(item->value, "AX1") || @@ -431,6 +445,10 @@ static int bestups_manufacturer(item_t *item, char *value, const size_t valuelen /* Unknown devices */ snprintf(value, valuelen, item->dfl, "Unknown"); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif + return 0; } @@ -439,6 +457,12 @@ static int bestups_model(item_t *item, char *value, const size_t valuelen) { item_t *unskip; +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif + /* Best Power devices */ if (!strcmp(item->value, "AX1")) { @@ -510,6 +534,10 @@ static int bestups_model(item_t *item, char *value, const size_t valuelen) } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif + return 0; } @@ -526,7 +554,15 @@ static int bestups_batt_runtime(item_t *item, char *value, const size_t valuelen /* Battery runtime is reported by the UPS in minutes, NUT expects seconds */ runtime = strtod(item->value, NULL) * 60; +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, runtime); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } @@ -541,7 +577,15 @@ static int bestups_batt_packs(item_t *item, char *value, const size_t valuelen) return -1; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, strtol(item->value, NULL, 10)); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif /* Unskip battery.packs setvar */ unskip = find_nut_info("battery.packs", QX_FLAG_SETVAR, 0); @@ -567,7 +611,15 @@ static int bestups_get_pins_shutdown_mode(item_t *item, char *value, const size_ pins_shutdown_mode = strtol(item->value, NULL, 10); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, pins_shutdown_mode); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif /* We were not asked by the user to change the value */ if ((item->qxflags & QX_FLAG_NONUT) && !getval(item->info_type)) @@ -683,7 +735,15 @@ static int bestups_voltage_settings(item_t *item, char *value, const size_t valu } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, val); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } From 70f637751ee0cdef2fc68fa7652a420fb71d5c5e Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:02:36 +0100 Subject: [PATCH 22/33] drivers/nutdrv_qx_bestups.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/nutdrv_qx_bestups.c | 57 ++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/drivers/nutdrv_qx_bestups.c b/drivers/nutdrv_qx_bestups.c index 9bb74f69a0..1919376459 100644 --- a/drivers/nutdrv_qx_bestups.c +++ b/drivers/nutdrv_qx_bestups.c @@ -372,13 +372,17 @@ static int bestups_process_setvar(item_t *item, char *value, const size_t valuel } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->command, val); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -415,9 +419,13 @@ static int bestups_process_bbb_status_bit(item_t *item, char *value, const size_ /* Identify UPS manufacturer */ static int bestups_manufacturer(item_t *item, char *value, const size_t valuelen) { -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif @@ -445,7 +453,8 @@ static int bestups_manufacturer(item_t *item, char *value, const size_t valuelen /* Unknown devices */ snprintf(value, valuelen, item->dfl, "Unknown"); -#if defined (__GNUC__) || defined (__clang__) + +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -457,9 +466,13 @@ static int bestups_model(item_t *item, char *value, const size_t valuelen) { item_t *unskip; -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif @@ -534,7 +547,7 @@ static int bestups_model(item_t *item, char *value, const size_t valuelen) } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -554,13 +567,17 @@ static int bestups_batt_runtime(item_t *item, char *value, const size_t valuelen /* Battery runtime is reported by the UPS in minutes, NUT expects seconds */ runtime = strtod(item->value, NULL) * 60; -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, runtime); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -577,13 +594,17 @@ static int bestups_batt_packs(item_t *item, char *value, const size_t valuelen) return -1; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, strtol(item->value, NULL, 10)); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -611,13 +632,17 @@ static int bestups_get_pins_shutdown_mode(item_t *item, char *value, const size_ pins_shutdown_mode = strtol(item->value, NULL, 10); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, pins_shutdown_mode); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -735,13 +760,17 @@ static int bestups_voltage_settings(item_t *item, char *value, const size_t valu } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, val); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From 26653c6de40b2c480f0e30e0598938915f79fe52 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:25:18 +0100 Subject: [PATCH 23/33] drivers/nutdrv_qx_blazer-common.c: various routines: do not warn about nonliteral format string in these cases --- drivers/nutdrv_qx_blazer-common.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/nutdrv_qx_blazer-common.c b/drivers/nutdrv_qx_blazer-common.c index feecad1a06..f0c89a4f97 100644 --- a/drivers/nutdrv_qx_blazer-common.c +++ b/drivers/nutdrv_qx_blazer-common.c @@ -203,7 +203,15 @@ int blazer_process_setvar(item_t *item, char *value, const size_t valuelen) /* Truncate to minute */ ondelay -= (ondelay % 60); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, "%d", ondelay); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif } else if (!strcasecmp(item->info_type, "ups.delay.shutdown")) { @@ -216,7 +224,15 @@ int blazer_process_setvar(item_t *item, char *value, const size_t valuelen) offdelay -= (offdelay % 60); } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, "%d", offdelay); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif } else { @@ -231,6 +247,11 @@ int blazer_process_setvar(item_t *item, char *value, const size_t valuelen) /* Preprocess instant commands */ int blazer_process_command(item_t *item, char *value, const size_t valuelen) { +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif if (!strcasecmp(item->info_type, "shutdown.return")) { /* Sn: Shutdown after n minutes and then turn on when mains is back @@ -302,6 +323,9 @@ int blazer_process_command(item_t *item, char *value, const size_t valuelen) return -1; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } From ff335d79848e5d89268f89ba853c574a7d3eaaec Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:03:13 +0100 Subject: [PATCH 24/33] drivers/nutdrv_qx_blazer-common.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/nutdrv_qx_blazer-common.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/drivers/nutdrv_qx_blazer-common.c b/drivers/nutdrv_qx_blazer-common.c index f0c89a4f97..e4c53f7d8e 100644 --- a/drivers/nutdrv_qx_blazer-common.c +++ b/drivers/nutdrv_qx_blazer-common.c @@ -203,13 +203,17 @@ int blazer_process_setvar(item_t *item, char *value, const size_t valuelen) /* Truncate to minute */ ondelay -= (ondelay % 60); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, "%d", ondelay); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -224,13 +228,17 @@ int blazer_process_setvar(item_t *item, char *value, const size_t valuelen) offdelay -= (offdelay % 60); } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, "%d", offdelay); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -247,11 +255,16 @@ int blazer_process_setvar(item_t *item, char *value, const size_t valuelen) /* Preprocess instant commands */ int blazer_process_command(item_t *item, char *value, const size_t valuelen) { -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif + if (!strcasecmp(item->info_type, "shutdown.return")) { /* Sn: Shutdown after n minutes and then turn on when mains is back @@ -323,7 +336,8 @@ int blazer_process_command(item_t *item, char *value, const size_t valuelen) return -1; } -#if defined (__GNUC__) || defined (__clang__) + +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From 6c50d059a5fc9ab0009d7bab5136950fdae7a092 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:26:44 +0100 Subject: [PATCH 25/33] drivers/nutdrv_qx_mecer.c: various routines: do not warn about nonliteral format string in these cases --- drivers/nutdrv_qx_mecer.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/nutdrv_qx_mecer.c b/drivers/nutdrv_qx_mecer.c index 2e2bacfe1b..6b9f76aadc 100644 --- a/drivers/nutdrv_qx_mecer.c +++ b/drivers/nutdrv_qx_mecer.c @@ -215,7 +215,15 @@ static int voltronic_p98_protocol(item_t *item, char *value, const size_t valuel return -1; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, "Voltronic Power P98"); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } @@ -260,7 +268,15 @@ static int mecer_process_test_battery(item_t *item, char *value, const size_t va } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->command, buf); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } From 32fe8be74f4c302cb2f0235c3cec2d383a5d4d3a Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:03:36 +0100 Subject: [PATCH 26/33] drivers/nutdrv_qx_mecer.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/nutdrv_qx_mecer.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/nutdrv_qx_mecer.c b/drivers/nutdrv_qx_mecer.c index 6b9f76aadc..a8c4821fde 100644 --- a/drivers/nutdrv_qx_mecer.c +++ b/drivers/nutdrv_qx_mecer.c @@ -215,13 +215,17 @@ static int voltronic_p98_protocol(item_t *item, char *value, const size_t valuel return -1; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, "Voltronic Power P98"); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -268,13 +272,17 @@ static int mecer_process_test_battery(item_t *item, char *value, const size_t va } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->command, buf); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From e62721b161f66414769a86aa351b2ee0aebec9f1 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:27:22 +0100 Subject: [PATCH 27/33] drivers/nutdrv_qx_voltronic-qs.c: do not warn about nonliteral format string in this case --- drivers/nutdrv_qx_voltronic-qs.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/nutdrv_qx_voltronic-qs.c b/drivers/nutdrv_qx_voltronic-qs.c index 44379251e9..82813e0a0f 100644 --- a/drivers/nutdrv_qx_voltronic-qs.c +++ b/drivers/nutdrv_qx_voltronic-qs.c @@ -196,7 +196,15 @@ static int voltronic_qs_protocol(item_t *item, char *value, const size_t valuele return -1; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, item->value); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } From 93d7fe80b84ecea811a0055411a392778189d5b4 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:04:35 +0100 Subject: [PATCH 28/33] drivers/nutdrv_qx_voltronic-qs.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/nutdrv_qx_voltronic-qs.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/nutdrv_qx_voltronic-qs.c b/drivers/nutdrv_qx_voltronic-qs.c index 82813e0a0f..43df438d04 100644 --- a/drivers/nutdrv_qx_voltronic-qs.c +++ b/drivers/nutdrv_qx_voltronic-qs.c @@ -196,13 +196,17 @@ static int voltronic_qs_protocol(item_t *item, char *value, const size_t valuele return -1; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, item->value); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From 2f414a1e56343f3323e72610bb74a09641acd619 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:29:26 +0100 Subject: [PATCH 29/33] drivers/nutdrv_qx_voltronic-qs-hex.c: various routines: do not warn about nonliteral format string in these cases --- drivers/nutdrv_qx_voltronic-qs-hex.c | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/drivers/nutdrv_qx_voltronic-qs-hex.c b/drivers/nutdrv_qx_voltronic-qs-hex.c index 6e05661ae9..aad35efbc3 100644 --- a/drivers/nutdrv_qx_voltronic-qs-hex.c +++ b/drivers/nutdrv_qx_voltronic-qs-hex.c @@ -323,7 +323,15 @@ static int voltronic_qs_hex_protocol(item_t *item, char *value, const size_t val return -1; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, item->value); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif /* Unskip items supported only by devices that implement 'T' protocol */ @@ -356,7 +364,15 @@ static int voltronic_qs_hex_input_output_voltage(item_t *item, char *value, cons val = strtol(item->value, &str_end, 16) * strtol(str_end, NULL, 16) / 51; ret = val / 256.0; +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, ret); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } @@ -369,7 +385,15 @@ static int voltronic_qs_hex_load(item_t *item, char *value, const size_t valuele return -1; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, strtol(item->value, NULL, 16)); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } @@ -391,7 +415,15 @@ static int voltronic_qs_hex_frequency(item_t *item, char *value, const size_t va ret = val2 / val1; ret = ret > 99.9 ? 99.9 : ret; +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, ret); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } @@ -410,7 +442,15 @@ static int voltronic_qs_hex_battery_voltage(item_t *item, char *value, const siz val1 = strtol(item->value, &str_end, 16); val2 = strtol(str_end, NULL, 16); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, (val1 * val2) / 510.0); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } @@ -478,7 +518,15 @@ static int voltronic_qs_hex_process_ratings_bits(item_t *item, char *value, cons return -1; } +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif snprintf(value, valuelen, item->dfl, ret); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif return 0; } From 67fff3139b30d0afbdd0177a5e090eb686d62d81 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:04:18 +0100 Subject: [PATCH 30/33] drivers/nutdrv_qx_voltronic-qs-hex.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- drivers/nutdrv_qx_voltronic-qs-hex.c | 48 +++++++++++++++++++++------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/drivers/nutdrv_qx_voltronic-qs-hex.c b/drivers/nutdrv_qx_voltronic-qs-hex.c index aad35efbc3..30771b0414 100644 --- a/drivers/nutdrv_qx_voltronic-qs-hex.c +++ b/drivers/nutdrv_qx_voltronic-qs-hex.c @@ -323,13 +323,17 @@ static int voltronic_qs_hex_protocol(item_t *item, char *value, const size_t val return -1; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, item->value); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -364,13 +368,17 @@ static int voltronic_qs_hex_input_output_voltage(item_t *item, char *value, cons val = strtol(item->value, &str_end, 16) * strtol(str_end, NULL, 16) / 51; ret = val / 256.0; -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, ret); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -385,13 +393,17 @@ static int voltronic_qs_hex_load(item_t *item, char *value, const size_t valuele return -1; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, strtol(item->value, NULL, 16)); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -415,13 +427,17 @@ static int voltronic_qs_hex_frequency(item_t *item, char *value, const size_t va ret = val2 / val1; ret = ret > 99.9 ? 99.9 : ret; -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, ret); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -442,13 +458,17 @@ static int voltronic_qs_hex_battery_voltage(item_t *item, char *value, const siz val1 = strtol(item->value, &str_end, 16); val2 = strtol(str_end, NULL, 16); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, (val1 * val2) / 510.0); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif @@ -518,13 +538,17 @@ static int voltronic_qs_hex_process_ratings_bits(item_t *item, char *value, cons return -1; } -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif snprintf(value, valuelen, item->dfl, ret); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From 331ed79fc0fc5a2304d1d38e4c90f2bb9651b6a0 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:34:26 +0100 Subject: [PATCH 31/33] tools/nut-scanner/nutscan-serial.c: do not warn about nonliteral format string in this case --- tools/nut-scanner/nutscan-serial.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tools/nut-scanner/nutscan-serial.c b/tools/nut-scanner/nutscan-serial.c index 7b657ebd86..d7f3ad62da 100644 --- a/tools/nut-scanner/nutscan-serial.c +++ b/tools/nut-scanner/nutscan-serial.c @@ -192,9 +192,20 @@ char ** nutscan_get_serial_ports_list(const char *ports_range) stop_port = cur_device->auto_stop_port; } for( current_port=start_port; current_port <= stop_port; - current_port++){ - snprintf(str_tmp, sizeof(str_tmp),cur_device->name, + current_port++) { +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#pragma GCC diagnostic ignored "-Wformat-security" +#endif + /* We actually have a format string in the name, + * see the device_portname[] definition above */ + snprintf(str_tmp, sizeof(str_tmp), cur_device->name, current_port); +#if defined (__GNUC__) || defined (__clang__) +#pragma GCC diagnostic pop +#endif + ports_list = add_port(ports_list,str_tmp); } } From 8eea9fdf34a58be88e8f6206670725634550ce3e Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Sun, 22 Nov 2020 03:06:31 +0100 Subject: [PATCH 32/33] tools/nut-scanner/nutscan-serial.c: fix diags pragmas to use our configured-support macros for cleaner fencing (nonliteral format strings) --- tools/nut-scanner/nutscan-serial.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/nut-scanner/nutscan-serial.c b/tools/nut-scanner/nutscan-serial.c index d7f3ad62da..770ce6e47a 100644 --- a/tools/nut-scanner/nutscan-serial.c +++ b/tools/nut-scanner/nutscan-serial.c @@ -193,16 +193,20 @@ char ** nutscan_get_serial_ports_list(const char *ports_range) } for( current_port=start_port; current_port <= stop_port; current_port++) { -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_FORMAT_SECURITY #pragma GCC diagnostic ignored "-Wformat-security" #endif /* We actually have a format string in the name, * see the device_portname[] definition above */ snprintf(str_tmp, sizeof(str_tmp), cur_device->name, current_port); -#if defined (__GNUC__) || defined (__clang__) +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif From 659b288398ab4d14462dad5e2cb4887b14033b00 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 18 Nov 2020 01:11:50 +0100 Subject: [PATCH 33/33] drivers/tripplite.c: upsdrv_initinfo(): use a literal format string --- drivers/tripplite.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/tripplite.c b/drivers/tripplite.c index 03aa23260b..651659ca4b 100644 --- a/drivers/tripplite.c +++ b/drivers/tripplite.c @@ -299,15 +299,15 @@ void upsdrv_initinfo(void) w = hex2d(w_value, 2); l = hex2d(l_value, 2); - model = "Smart %d"; + model = "Smart"; if (w & 0x40) - model = "Unison %d"; + model = "Unison"; va = ((w & 0x3f) * 32 + (l >> 3)) * 5; /* New formula */ if (!(w & 0x80)) va = l / 2; /* Old formula */ - dstate_setinfo("ups.model", model, va); + dstate_setinfo("ups.model", "%s %d", model, va); dstate_setinfo("ups.firmware", "%c%c", 'A'+v_value[0]-'0', 'A'+v_value[1]-'0');