From 74f87280e7faf5d376f1f3e19bd52438b7756ba4 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:23:39 +0100 Subject: [PATCH 01/18] clients/upsclient.c: upscli_strerror(): do not warn about nonliteral format string in this case --- clients/upsclient.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/clients/upsclient.c b/clients/upsclient.c index 6779d32c75..be147cac0b 100644 --- a/clients/upsclient.c +++ b/clients/upsclient.c @@ -504,6 +504,16 @@ const char *upscli_strerror(UPSCONN_t *ups) char sslbuf[UPSCLI_ERRBUF_LEN]; #endif +#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 (!ups) { return upscli_errlist[UPSCLI_ERR_INVALIDARG].str; } @@ -561,6 +571,10 @@ const char *upscli_strerror(UPSCONN_t *ups) return ups->errbuf; } +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif + /* fallthrough */ snprintf(ups->errbuf, UPSCLI_ERRBUF_LEN, "Unknown error flag %d", From ff3ae56c02bcf74d179c1273c9bd6367b4056a94 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:25:05 +0100 Subject: [PATCH 02/18] clients/upsclient.c: build_cmd(): do not warn about nonliteral format string in this case --- clients/upsclient.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/clients/upsclient.c b/clients/upsclient.c index be147cac0b..1a09beefef 100644 --- a/clients/upsclient.c +++ b/clients/upsclient.c @@ -1183,8 +1183,20 @@ static void build_cmd(char *buf, size_t bufsize, const char *cmdname, /* snprintfcat would tie us to common */ len = strlen(buf); +#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(buf + len, bufsize - len, format, pconf_encode(arg[i], enc, sizeof(enc))); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } len = strlen(buf); From 5569d9ec0a0566e05cf361a8934756920838a97f Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:30:43 +0100 Subject: [PATCH 03/18] clients/drivers: drawbar() noimage(): do not warn about nonliteral format string in this case --- clients/upsimage.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/clients/upsimage.c b/clients/upsimage.c index 30c6ecc073..9e92f96e8e 100644 --- a/clients/upsimage.c +++ b/clients/upsimage.c @@ -260,7 +260,19 @@ static void drawbar( bar_color); /* stick the text version of the value at the bottom center */ +#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(text, sizeof(text), format, value); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif gdImageString(im, gdFontMediumBold, (width - strlen(text)*gdFontMediumBold->w)/2, height - gdFontMediumBold->h, @@ -281,7 +293,19 @@ static void noimage(const char *fmt, ...) va_list ap; va_start(ap, fmt); +#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(msg, sizeof(msg), fmt, ap); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif va_end(ap); width = get_imgarg("width"); From 928faf8e05fd437d0099a360d43cb2d8c7a79879 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:31:05 +0100 Subject: [PATCH 04/18] clients/drivers: do_notify(): do not warn about nonliteral format string in this case --- clients/upsmon.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/clients/upsmon.c b/clients/upsmon.c index 4d1d883afd..0f769385a6 100644 --- a/clients/upsmon.c +++ b/clients/upsmon.c @@ -175,8 +175,21 @@ static void do_notify(const utype_t *ups, int ntype) if (notifylist[i].type == ntype) { upsdebugx(2, "%s: ntype 0x%04x (%s)", __func__, ntype, notifylist[i].name); - snprintf(msg, sizeof(msg), notifylist[i].msg ? notifylist[i].msg : notifylist[i].stockmsg, +#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(msg, sizeof(msg), + notifylist[i].msg ? notifylist[i].msg : notifylist[i].stockmsg, ups ? ups->sys : ""); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif notify(msg, notifylist[i].flags, notifylist[i].name, upsname); return; From aa600401c7cdc7428f436e8d98732a437fdf3d1c Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:31:22 +0100 Subject: [PATCH 05/18] clients/drivers: error_page(): do not warn about nonliteral format string in this case --- clients/upsset.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/clients/upsset.c b/clients/upsset.c index a239426ed4..5af981bb76 100644 --- a/clients/upsset.c +++ b/clients/upsset.c @@ -264,7 +264,19 @@ static void error_page(const char *next, const char *title, va_list ap; va_start(ap, fmt); +#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(msg, sizeof(msg), fmt, ap); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif va_end(ap); do_header(title); From 896b03f8c25e595bf6a3d1fbbf8fb3e5d2cff4b4 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:33:08 +0100 Subject: [PATCH 06/18] drivers/serial.c: various routines: do not warn about nonliteral format string in these cases --- drivers/serial.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/serial.c b/drivers/serial.c index 398d0d1ef8..535926b255 100644 --- a/drivers/serial.c +++ b/drivers/serial.c @@ -271,7 +271,19 @@ static int send_formatted(int fd, const char *fmt, va_list va, unsigned long d_u int ret; char buf[LARGEBUF]; +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif if (ret >= (int)sizeof(buf)) { upslogx(LOG_WARNING, "vsnprintf needed more than %d bytes", (int)sizeof(buf)); @@ -288,7 +300,19 @@ int ser_send_pace(int fd, unsigned long d_usec, const char *fmt, ...) va_start(ap, fmt); +#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 = send_formatted(fd, fmt, ap, d_usec); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif va_end(ap); @@ -303,7 +327,19 @@ int ser_send(int fd, const char *fmt, ...) va_start(ap, fmt); +#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 = send_formatted(fd, fmt, ap, 0); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif va_end(ap); From 0e06d3641fd50086f7b89261e66b99232a2c1c76 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:35:03 +0100 Subject: [PATCH 07/18] drivers/bcmxcp.c: do not warn about nonliteral format string in this case --- drivers/bcmxcp.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/bcmxcp.c b/drivers/bcmxcp.c index 52d9c9de42..7f39826155 100644 --- a/drivers/bcmxcp.c +++ b/drivers/bcmxcp.c @@ -870,7 +870,19 @@ void decode_meter_map_entry(const unsigned char *entry, const unsigned char form fValue = get_float(entry); /* Format is packed BCD */ snprintf(sFormat, 31, "%%%d.%df", ((format & 0xf0) >> 4), (format & 0x0f)); +#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, 127, sFormat, fValue); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } else if (format == 0xe2) { /* Seconds */ From 851202bed12954791c5a9565eda9416f438f7f90 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:35:42 +0100 Subject: [PATCH 08/18] drivers/belkinunv.c: do not warn about nonliteral format string in this case --- drivers/belkinunv.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/belkinunv.c b/drivers/belkinunv.c index 238e844437..9f234a4503 100644 --- a/drivers/belkinunv.c +++ b/drivers/belkinunv.c @@ -710,7 +710,19 @@ static void updatestatus(int smode, const char *fmt, ...) { /* read formatted argument string */ va_start(ap, fmt); +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif buf[sizeof(buf)-1] = 0; va_end(ap); From 55720b0a821c7e308f15fb2a33720273c4ea9c18 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:39:44 +0100 Subject: [PATCH 09/18] drivers/liebert-esp2.c: rename scope-local 'val' variables that shadow another from same routine --- drivers/liebert-esp2.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/liebert-esp2.c b/drivers/liebert-esp2.c index 7ed89db822..58f63e94ba 100644 --- a/drivers/liebert-esp2.c +++ b/drivers/liebert-esp2.c @@ -389,15 +389,15 @@ void upsdrv_updateinfo(void) int ret, i; for (i = 0; vartab[i].var; i++) { - int16_t val; + int16_t intval; ret = do_command(vartab[i].cmd, reply, 6); if (ret < 8) { continue; } - val = (unsigned char)reply[5]; - val <<= 8; - val += (unsigned char)reply[6]; - dstate_setinfo(vartab[i].var, vartab[i].fmt, val * multi[vartab[i].multindex]); + intval = (unsigned char)reply[5]; + intval <<= 8; + intval += (unsigned char)reply[6]; + dstate_setinfo(vartab[i].var, vartab[i].fmt, multi[vartab[i].multindex] * intval); } if (num_inphases==3){ @@ -421,27 +421,27 @@ void upsdrv_updateinfo(void) } for (i = 0; cmdin_p[i].var; i++) { - int16_t val; + int16_t intval; ret = do_command(cmdin_p[i].cmd, reply, 6); if (ret < 8) { continue; } - val = (unsigned char)reply[5]; - val <<= 8; - val += (unsigned char)reply[6]; - dstate_setinfo(cmdin_p[i].var, cmdin_p[i].fmt, val * multi[cmdin_p[i].multindex]); + intval = (unsigned char)reply[5]; + intval <<= 8; + intval += (unsigned char)reply[6]; + dstate_setinfo(cmdin_p[i].var, cmdin_p[i].fmt, multi[cmdin_p[i].multindex] * intval); } for (i = 0; cmdout_p[i].var; i++) { - int16_t val; + int16_t intval; ret = do_command(cmdout_p[i].cmd, reply, 6); if (ret < 8) { continue; } - val = (unsigned char)reply[5]; - val <<= 8; - val += (unsigned char)reply[6]; - dstate_setinfo(cmdout_p[i].var, cmdout_p[i].fmt, val * multi[cmdout_p[i].multindex]); + intval = (unsigned char)reply[5]; + intval <<= 8; + intval += (unsigned char)reply[6]; + dstate_setinfo(cmdout_p[i].var, cmdout_p[i].fmt, multi[cmdout_p[i].multindex] * intval); } status_init(); From dcef919a89255f0b1f9dc2959167d9e02fa51b3d Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:37:39 +0100 Subject: [PATCH 10/18] drivers/liebert-esp2.c: do not warn about nonliteral format string in these cases --- drivers/liebert-esp2.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/liebert-esp2.c b/drivers/liebert-esp2.c index 58f63e94ba..e415332e4c 100644 --- a/drivers/liebert-esp2.c +++ b/drivers/liebert-esp2.c @@ -397,7 +397,19 @@ void upsdrv_updateinfo(void) intval = (unsigned char)reply[5]; intval <<= 8; intval += (unsigned char)reply[6]; +#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(vartab[i].var, vartab[i].fmt, multi[vartab[i].multindex] * intval); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } if (num_inphases==3){ @@ -429,7 +441,19 @@ void upsdrv_updateinfo(void) intval = (unsigned char)reply[5]; intval <<= 8; intval += (unsigned char)reply[6]; +#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(cmdin_p[i].var, cmdin_p[i].fmt, multi[cmdin_p[i].multindex] * intval); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } for (i = 0; cmdout_p[i].var; i++) { @@ -441,7 +465,19 @@ void upsdrv_updateinfo(void) intval = (unsigned char)reply[5]; intval <<= 8; intval += (unsigned char)reply[6]; +#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(cmdout_p[i].var, cmdout_p[i].fmt, multi[cmdout_p[i].multindex] * intval); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } status_init(); From 7a0d819485013eaff87a00f2bccc21982b278fff Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:46:22 +0100 Subject: [PATCH 11/18] drivers/usbhid-ups.c: do not warn about nonliteral format string in this case --- drivers/usbhid-ups.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/usbhid-ups.c b/drivers/usbhid-ups.c index e3eabe20cc..bf07f7c001 100644 --- a/drivers/usbhid-ups.c +++ b/drivers/usbhid-ups.c @@ -1596,7 +1596,19 @@ static int ups_infoval_set(hid_info_t *item, double value) dstate_setinfo(item->info_type, "%s", nutvalue); } else { +#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(item->info_type, item->dfl, value); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } return 1; From 8a255dbf0208d83bff9aa7758d038b8773aa3225 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:48:21 +0100 Subject: [PATCH 12/18] drivers/powerp-bin.c: do not warn about nonliteral format string in this case --- drivers/powerp-bin.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/powerp-bin.c b/drivers/powerp-bin.c index 0155a00045..5a6d3c58aa 100644 --- a/drivers/powerp-bin.c +++ b/drivers/powerp-bin.c @@ -298,8 +298,20 @@ static int powpan_setvar(const char *varname, const char *val) continue; } +#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, vartab[i].map[type][j].command); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif if ((powpan_command(command, 4) == 3) && (!memcmp(powpan_answer, command, 3))) { dstate_setinfo(varname, "%s", val); From 8242f019eaf0d7c58692e43f9aac563a4426b389 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:48:56 +0100 Subject: [PATCH 13/18] drivers/nutdrv_qx.c: do not warn about nonliteral format string in this case --- drivers/nutdrv_qx.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/nutdrv_qx.c b/drivers/nutdrv_qx.c index 55ed3c1e5e..0388fd20f4 100644 --- a/drivers/nutdrv_qx.c +++ b/drivers/nutdrv_qx.c @@ -2859,7 +2859,19 @@ int ups_infoval_set(item_t *item) return -1; } +#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, sizeof(value), item->dfl, strtod(value, NULL)); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } } From e3dadc0d1066748c281779865c0a272ff3ea1210 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:50:01 +0100 Subject: [PATCH 14/18] drivers/nutdrv_qx_voltronic.c: various routines: do not warn about nonliteral format string in these cases --- drivers/nutdrv_qx_voltronic.c | 264 ++++++++++++++++++++++++++++++++-- 1 file changed, 254 insertions(+), 10 deletions(-) diff --git a/drivers/nutdrv_qx_voltronic.c b/drivers/nutdrv_qx_voltronic.c index 511ff7fb78..b1aab56088 100644 --- a/drivers/nutdrv_qx_voltronic.c +++ b/drivers/nutdrv_qx_voltronic.c @@ -1920,7 +1920,19 @@ static int voltronic_process_setvar(item_t *item, char *value, const size_t valu } +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } @@ -2052,7 +2064,19 @@ static int voltronic_process_command(item_t *item, char *value, const size_t val } +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } @@ -2367,7 +2391,19 @@ static int voltronic_capability(item_t *item, char *value, const size_t valuelen if (!val) return -1; +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif /* This item doesn't have a NUT var and we were not asked by the user to change its value */ if ((item->qxflags & QX_FLAG_NONUT) && !getval(item->info_type)) @@ -2388,6 +2424,15 @@ static int voltronic_capability(item_t *item, char *value, const size_t valuelen /* *SETVAR* Set UPS capability options */ static int voltronic_capability_set(item_t *item, char *value, const size_t valuelen) { +#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(value, "yes")) { snprintf(value, valuelen, item->command, "E"); return 0; @@ -2397,6 +2442,9 @@ static int voltronic_capability_set(item_t *item, char *value, const size_t valu snprintf(value, valuelen, item->command, "D"); return 0; } +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif /* At this point value should have been already checked against enum so this shouldn't happen.. however.. */ upslogx(LOG_ERR, "%s: given value [%s] is not acceptable. Enter either 'yes' or 'no'.", item->info_type, value); @@ -2449,6 +2497,15 @@ static int voltronic_capability_set_nonut(item_t *item, char *value, const size_ return -1; } +#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(value, "disabled")) { snprintf(value, valuelen, item->command, "D"); } else if (!strcasecmp(value, "enabled")) { @@ -2458,6 +2515,9 @@ static int voltronic_capability_set_nonut(item_t *item, char *value, const size_ upslogx(LOG_ERR, "%s: [%s] is not within acceptable values [enabled/disabled]", item->info_type, value); return -1; } +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } @@ -2504,7 +2564,19 @@ static int voltronic_eco_volt(item_t *item, char *value, const size_t valuelen) return -1; } +#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, strtod(item->value, NULL)); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif outvoltnom = dstate_getinfo("output.voltage.nominal"); @@ -2662,7 +2734,19 @@ static int voltronic_eco_freq(item_t *item, char *value, const size_t valuelen) return -1; } +#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, strtod(item->value, NULL)); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif /* Unskip input.transfer.{high,low} setvar */ unskip = find_nut_info(item->info_type, QX_FLAG_SETVAR, 0); @@ -2710,7 +2794,19 @@ static int voltronic_bypass(item_t *item, char *value, const size_t valuelen) } +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif /* No user-provided value to change.. */ if (!getval(item->info_type)) @@ -2740,7 +2836,19 @@ static int voltronic_batt_numb(item_t *item, char *value, const size_t valuelen) battery_number = strtol(item->value, NULL, 10); +#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, battery_number); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif /* No user-provided value to change.. */ if (!getval(item->info_type)) @@ -2771,7 +2879,19 @@ static int voltronic_batt_runtime(item_t *item, char *value, const size_t valuel /* Battery runtime is reported by the UPS in minutes, NUT expects seconds */ runtime = strtod(item->value, NULL) * 60; +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } @@ -2836,7 +2956,19 @@ static int voltronic_fault(item_t *item, char *value, const size_t valuelen) upslogx(LOG_INFO, "Checking for faults.."); if (!strcasecmp(item->value, "OK")) { +#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, "No fault found"); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif upslogx(LOG_INFO, "%s", value); item->qxflags |= QX_FLAG_SKIP; return 0; @@ -3185,7 +3317,19 @@ static int voltronic_fault(item_t *item, char *value, const size_t valuelen) } +#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, alarm); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif upslogx(LOG_INFO, "Fault found: %s", alarm); item->qxflags |= QX_FLAG_SKIP; @@ -3664,15 +3808,23 @@ static int voltronic_mode(item_t *item, char *value, const size_t valuelen) } +#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 (alarm && !strcasecmp(item->info_type, "ups.alarm")) { - snprintf(value, valuelen, item->dfl, alarm); - } else if (status && !strcasecmp(item->info_type, "ups.status")) { - snprintf(value, valuelen, item->dfl, status); - } +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } @@ -3866,7 +4018,19 @@ static int voltronic_output_powerfactor(item_t *item, char *value, const size_t /* UPS report a value expressed in % so -> output.powerfactor*100 e.g. opf = 0,8 -> ups = 80 */ opf = strtod(item->value, NULL) * 0.01; +#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, opf); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } @@ -3880,7 +4044,20 @@ static int voltronic_serial_numb(item_t *item, char *value, const size_t valuele return -1; } +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif + return 0; } @@ -3913,20 +4090,26 @@ static int voltronic_outlet(item_t *item, char *value, const size_t valuelen) } +#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 (strstr(item->info_type, "switchable")) { - snprintf(value, valuelen, item->dfl, switchable); - } else if (strstr(item->info_type, "status")) { - snprintf(value, valuelen, item->dfl, status); - } else { - /* Don't know what happened */ return -1; - } +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif /* Unskip outlet.n.delay.shutdown */ snprintf(buf, sizeof(buf), "outlet.%c.delay.shutdown", number); @@ -3980,7 +4163,19 @@ static int voltronic_outlet_delay(item_t *item, char *value, const size_t valuel /* UPS reports minutes, NUT expects seconds */ val = strtod(item->value, NULL) * 60; +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif /* Unskip outlet.n.delay.shutdown setvar */ snprintf(buf, sizeof(buf), "outlet.%c.delay.shutdown", number); @@ -4004,7 +4199,19 @@ static int voltronic_outlet_delay_set(item_t *item, char *value, const size_t va /* From seconds to minute */ delay = delay / 60; +#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, delay); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } @@ -4023,7 +4230,19 @@ static int voltronic_p31b(item_t *item, char *value, const size_t valuelen) val = strtol(item->value, NULL, 10); +#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->info_rw[val].value); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } @@ -4068,7 +4287,20 @@ static int voltronic_p31g(item_t *item, char *value, const size_t valuelen) val = strtol(item->value, NULL, 10); +#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->info_rw[val].value); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif + work_range_type = val; return 0; @@ -4139,7 +4371,19 @@ static int voltronic_phase(item_t *item, char *value, const size_t valuelen) } +#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, angle); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif return 0; } From 0fa69918f51b832f59525baf445ae33843b9356d Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 16:06:46 +0100 Subject: [PATCH 15/18] drivers/snmp-ups.c: various routines: do not warn about nonliteral format string in these cases --- drivers/snmp-ups.c | 136 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 2 deletions(-) diff --git a/drivers/snmp-ups.c b/drivers/snmp-ups.c index dccf5e2e65..9f6645f19e 100644 --- a/drivers/snmp-ups.c +++ b/drivers/snmp-ups.c @@ -404,7 +404,19 @@ void upsdrv_initups(void) cur_info_p->OID = (char *)xmalloc(SU_INFOSIZE); snprintf((char*)cur_info_p->info_type, SU_INFOSIZE, "%s", su_info_p->info_type); /* Use the daisychain master (0) / 1rst device index */ +#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((char*)cur_info_p->OID, SU_INFOSIZE, su_info_p->OID, 0); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } else { upsdebugx(2, "Found entry, not a template %s", su_info_p->OID); @@ -1311,7 +1323,19 @@ bool_t match_model_OID() cur_info_p->OID = (char *)xmalloc(SU_INFOSIZE); snprintf((char*)cur_info_p->info_type, SU_INFOSIZE, "%s", su_info_p->info_type); /* Use the daisychain master (0) / 1rst device index */ +#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((char*)cur_info_p->OID, SU_INFOSIZE, su_info_p->OID, 0); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } else { upsdebugx(2, "Found entry, not a template %s", su_info_p->OID); @@ -1661,6 +1685,15 @@ int base_snmp_template_index(const snmp_info_t *su_info_p) { /* not initialised yet */ for (base_index = 0 ; base_index < 2 ; base_index++) { +#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 /* Test if this template also includes daisychain, in which case * we just use the current device index */ if (is_multiple_template(su_info_p->OID) == TRUE) { @@ -1676,6 +1709,9 @@ int base_snmp_template_index(const snmp_info_t *su_info_p) else { snprintf(test_OID, sizeof(test_OID), su_info_p->OID, base_index); } +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif if (nut_snmp_get(test_OID) != NULL) { if (su_info_p->flags & SU_FLAG_ZEROINVALID) { @@ -1722,7 +1758,19 @@ static int guestimate_template_count(snmp_info_t *su_info_p) upsdebugx(1, "%s(%s)", __func__, OID_template); /* Determine if OID index starts from 0 or 1? */ +#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(test_OID, sizeof(test_OID), OID_template, base_index); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif if (nut_snmp_get(test_OID) == NULL) { base_index++; } @@ -1737,7 +1785,19 @@ static int guestimate_template_count(snmp_info_t *su_info_p) /* Now, actually iterate */ for (base_count = 0 ; ; base_count++) { +#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(test_OID, sizeof(test_OID), OID_template, base_index + base_count); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif if (nut_snmp_get(test_OID) == NULL) break; } @@ -1817,8 +1877,20 @@ bool_t process_template(int mode, const char* type, snmp_info_t *su_info_p) /* Device 1 ("device.0", whole daisychain) needs no * special processing */ cur_nut_index = cur_template_number; +#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((char*)cur_info_p.info_type, SU_INFOSIZE, su_info_p->info_type, cur_nut_index); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } } else /* Outlet and outlet groups templates */ @@ -1826,6 +1898,15 @@ bool_t process_template(int mode, const char* type, snmp_info_t *su_info_p) /* Get the index of the current template instance */ cur_nut_index = cur_template_number; +#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 /* Special processing for daisychain */ if (daisychain_enabled == TRUE) { /* Device(s) 1-N (master + slave(s)) need to append 'device.x' */ @@ -1835,8 +1916,8 @@ bool_t process_template(int mode, const char* type, snmp_info_t *su_info_p) strcat(&tmp_buf[0], su_info_p->info_type); upsdebugx(4, "FORMATTING STRING = %s", &tmp_buf[0]); - snprintf((char*)cur_info_p.info_type, SU_INFOSIZE, - &tmp_buf[0], current_device_number, cur_nut_index); + snprintf((char*)cur_info_p.info_type, SU_INFOSIZE, + &tmp_buf[0], current_device_number, cur_nut_index); } else { // FIXME: daisychain-whole, what to do? @@ -1885,6 +1966,9 @@ bool_t process_template(int mode, const char* type, snmp_info_t *su_info_p) snprintf((char *)cur_info_p.OID, SU_INFOSIZE, su_info_p->OID, cur_template_number); } } +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif /* add instant commands to the info database. */ if (SU_TYPE(su_info_p) == SU_TYPE_CMD) { @@ -2181,7 +2265,19 @@ int process_phase_data(const char* type, long *nb_phases, snmp_info_t *su_info_p * formatting string) that needs to be adapted! */ if (strchr(tmp_info_p->OID, '%') != NULL) { upsdebugx(2, "Found template, need to be adapted"); +#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((char*)tmpOID, SU_INFOSIZE, tmp_info_p->OID, current_device_number + device_template_offset); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } else { /* Otherwise, just point at what we found */ @@ -2444,8 +2540,20 @@ bool_t su_ups_get(snmp_info_t *su_info_p) if (tmp_info_p != NULL) { /* adapt the OID */ if (su_info_p->OID != NULL) { +#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((char *)tmp_info_p->OID, SU_INFOSIZE, su_info_p->OID, current_device_number + device_template_offset); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } else { free_info(tmp_info_p); @@ -2758,8 +2866,20 @@ int su_setOID(int mode, const char *varname, const char *val) if ((su_info_p->dfl != NULL) && (strstr(tmp_info_p->dfl, "%i") != NULL)) { su_info_p->dfl = (char *)xmalloc(SU_INFOSIZE); +#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((char *)su_info_p->dfl, sizeof(su_info_p->dfl), tmp_info_p->dfl, item_number); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } /* adapt the OID */ if (su_info_p->OID != NULL) { @@ -2776,6 +2896,15 @@ int su_setOID(int mode, const char *varname, const char *val) * these outlet | outlet groups also include formatting info, * so we have to check if the daisychain is enabled, and if * the formatting info for it are in 1rst or 2nd position */ +#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 (daisychain_enabled == TRUE) { /* Note: daisychain_enabled == TRUE means that we have * daisychain template. However: @@ -2801,6 +2930,9 @@ int su_setOID(int mode, const char *varname, const char *val) else { snprintf((char *)su_info_p->OID, SU_INFOSIZE, tmp_info_p->OID, item_number); } +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif } /* else, don't return STAT_SET_INVALID for mode==SU_MODE_SETVAR since we * can be setting a server side variable! */ From 31e385fba78663b26dde1eb0fec0866c726930e3 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 16:22:46 +0100 Subject: [PATCH 16/18] drivers/richcomm_usb.c: do not warn about nonliteral format string in this case --- drivers/richcomm_usb.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/richcomm_usb.c b/drivers/richcomm_usb.c index d824ab2387..2e2fc92dec 100644 --- a/drivers/richcomm_usb.c +++ b/drivers/richcomm_usb.c @@ -149,7 +149,19 @@ static void usb_comm_fail(const char *fmt, ...) } va_start(ap, fmt); +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif va_end(ap); if ((ret < 1) || (ret >= (int) sizeof(why))) { From 7447596787afc0a22bdfc04e5fd70a9c7eee6246 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 16:23:54 +0100 Subject: [PATCH 17/18] drivers/nutdrv_atcl_usb.c: do not warn about nonliteral format string in this case --- drivers/nutdrv_atcl_usb.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/nutdrv_atcl_usb.c b/drivers/nutdrv_atcl_usb.c index 3fc8700a9f..c25cb12fe5 100644 --- a/drivers/nutdrv_atcl_usb.c +++ b/drivers/nutdrv_atcl_usb.c @@ -165,7 +165,19 @@ static void usb_comm_fail(const char *fmt, ...) } va_start(ap, fmt); +#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); +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL +#pragma GCC diagnostic pop +#endif va_end(ap); if ((ret < 1) || (ret >= (int) sizeof(why))) { From e7dd006a85d8c699995ad8b969f4f501308feac7 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Thu, 26 Nov 2020 14:50:48 +0100 Subject: [PATCH 18/18] drivers/nutdrv_qx_blazer-common.c: remove overly-eager protection from nonliteral format strings --- drivers/nutdrv_qx_blazer-common.c | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/drivers/nutdrv_qx_blazer-common.c b/drivers/nutdrv_qx_blazer-common.c index e4c53f7d8e..09bac5022d 100644 --- a/drivers/nutdrv_qx_blazer-common.c +++ b/drivers/nutdrv_qx_blazer-common.c @@ -202,20 +202,7 @@ int blazer_process_setvar(item_t *item, char *value, const size_t valuelen) /* Truncate to minute */ ondelay -= (ondelay % 60); - -#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); -#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL -#pragma GCC diagnostic pop -#endif } else if (!strcasecmp(item->info_type, "ups.delay.shutdown")) { @@ -228,19 +215,7 @@ int blazer_process_setvar(item_t *item, char *value, const size_t valuelen) offdelay -= (offdelay % 60); } -#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); -#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL -#pragma GCC diagnostic pop -#endif } else {