summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2023-01-30 17:36:57 +0100
committerDmitry V. Levin <ldv@strace.io>2023-01-30 16:36:57 +0000
commitd13a8ea18f852e97201269e55255a14fe4fe5d0f (patch)
treeac308dd7d56af306d49bf7c996ecb6ae424d37b5
parente2ada10676aa6ce116964a41f083fa4776e9453a (diff)
downloadlinux-pam-git-d13a8ea18f852e97201269e55255a14fe4fe5d0f.tar.gz
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.
-rw-r--r--libpam/include/pam_cc_compat.h20
-rw-r--r--libpam/pam_handlers.c6
-rw-r--r--m4/warn_lang_flags.m41
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])