From d13a8ea18f852e97201269e55255a14fe4fe5d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Mon, 30 Jan 2023 17:36:57 +0100 Subject: Enable format compiler warnings * libpam/include/pam_cc_compat.h (DIAG_PUSH_IGNORE_FORMAT_NONLITERAL, DIAG_POP_IGNORE_FORMAT_NONLITERAL): New macros. * libpam/pam_handlers.c (_pam_open_config_file): Use them to exempt usage of format string literals from a constant array. * m4/warn_lang_flags.m4 (gl_WARN_ADD): Add -Wformat=2. --- libpam/include/pam_cc_compat.h | 20 ++++++++++++++++---- libpam/pam_handlers.c | 6 ++++-- m4/warn_lang_flags.m4 | 1 + 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/libpam/include/pam_cc_compat.h b/libpam/include/pam_cc_compat.h index 69190368..0a6e32d5 100644 --- a/libpam/include/pam_cc_compat.h +++ b/libpam/include/pam_cc_compat.h @@ -32,6 +32,11 @@ _Pragma("GCC diagnostic ignored \"-Wcast-align\"") # define DIAG_POP_IGNORE_CAST_ALIGN \ _Pragma("GCC diagnostic pop") +# define DIAG_PUSH_IGNORE_FORMAT_NONLITERAL \ + _Pragma("GCC diagnostic push"); \ + _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"") +# define DIAG_POP_IGNORE_FORMAT_NONLITERAL \ + _Pragma("GCC diagnostic pop") #elif PAM_CLANG_PREREQ(2, 6) # define DIAG_PUSH_IGNORE_CAST_QUAL \ _Pragma("clang diagnostic push"); \ @@ -43,11 +48,18 @@ _Pragma("clang diagnostic ignored \"-Wcast-align\"") # define DIAG_POP_IGNORE_CAST_ALIGN \ _Pragma("clang diagnostic pop") +# define DIAG_PUSH_IGNORE_FORMAT_NONLITERAL \ + _Pragma("clang diagnostic push"); \ + _Pragma("clang diagnostic ignored \"-Wformat-nonliteral\"") +# define DIAG_POP_IGNORE_FORMAT_NONLITERAL \ + _Pragma("clang diagnostic pop") #else -# define DIAG_PUSH_IGNORE_CAST_QUAL /* empty */ -# define DIAG_POP_IGNORE_CAST_QUAL /* empty */ -# define DIAG_PUSH_IGNORE_CAST_ALIGN /* empty */ -# define DIAG_POP_IGNORE_CAST_ALIGN /* empty */ +# define DIAG_PUSH_IGNORE_CAST_QUAL /* empty */ +# define DIAG_POP_IGNORE_CAST_QUAL /* empty */ +# define DIAG_PUSH_IGNORE_CAST_ALIGN /* empty */ +# define DIAG_POP_IGNORE_CAST_ALIGN /* empty */ +# define DIAG_PUSH_IGNORE_FORMAT_NONLITERAL /* empty */ +# define DIAG_POP_IGNORE_FORMAT_NONLITERAL /* empty */ #endif /* diff --git a/libpam/pam_handlers.c b/libpam/pam_handlers.c index 12ebb8fc..6629480e 100644 --- a/libpam/pam_handlers.c +++ b/libpam/pam_handlers.c @@ -281,7 +281,7 @@ _pam_open_config_file(pam_handle_t *pamh , char **path , FILE **file) { - const char *pamd_dirs[] = { PAM_CONFIG_DF, PAM_CONFIG_DIST_DF + const char *const pamd_dirs[] = { PAM_CONFIG_DF, PAM_CONFIG_DIST_DF #ifdef VENDORDIR , PAM_CONFIG_DIST2_DF #endif @@ -317,10 +317,12 @@ _pam_open_config_file(pam_handle_t *pamh } for (i = 0; i < PAM_ARRAY_SIZE(pamd_dirs); i++) { - if (asprintf (&p, pamd_dirs[i], service) < 0) { + DIAG_PUSH_IGNORE_FORMAT_NONLITERAL + if (asprintf (&p, pamd_dirs[i], service) < 0) { pam_syslog(pamh, LOG_CRIT, "asprintf failed"); return PAM_BUF_ERR; } + DIAG_POP_IGNORE_FORMAT_NONLITERAL D(("opening %s", p)); f = fopen(p, "r"); diff --git a/m4/warn_lang_flags.m4 b/m4/warn_lang_flags.m4 index 3ae03274..a4d6022f 100644 --- a/m4/warn_lang_flags.m4 +++ b/m4/warn_lang_flags.m4 @@ -8,6 +8,7 @@ gl_WARN_ADD([-Wcast-align]) gl_WARN_ADD([-Wcast-align=strict]) gl_WARN_ADD([-Wcast-qual]) gl_WARN_ADD([-Wdeprecated]) +gl_WARN_ADD([-Wformat=2]) gl_WARN_ADD([-Winit-self]) gl_WARN_ADD([-Winline]) gl_WARN_ADD([-Wmain]) -- cgit v1.2.1