>From f96acb886d4774084e1022807f9b20a2e285d20f Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Thu, 23 May 2013 13:14:37 +0200 Subject: [PATCH 19/20] Enable printf format string checking https://fedorahosted.org/sssd/ticket/1945 --- configure.ac | 18 ++++++++++++++++++ src/util/util.h | 10 ++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 511e8d6c8afbfb0cbf5aca076b460aa4c881e252..759122afdec4a37f784e5d8c8c8e333dc4d73757 100644 --- a/configure.ac +++ b/configure.ac @@ -267,6 +267,24 @@ if test x"$sss_client_cv_attribute_destructor" = xyes ; then [whether compiler supports __attribute__((destructor))]) fi +AC_CACHE_CHECK([whether compiler supports __attribute__((format))], + sss_cv_attribute_format, + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [void debug_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));] + )], + [sss_cv_attribute_format=yes], + [ + AC_MSG_RESULT([no]) + AC_MSG_WARN([compiler does NOT support __attribute__((format))]) + ]) + ]) + +if test x"$sss_cv_attribute_format" = xyes ; then + AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_FORMAT, 1, + [whether compiler supports __attribute__((format))]) +fi + PKG_CHECK_MODULES([CHECK], [check >= 0.9.5], [have_check=1], [have_check=]) if test x$have_check = x; then AC_MSG_WARN([Without the 'CHECK' libraries, you will be unable to run all tests in the 'make check' suite]) diff --git a/src/util/util.h b/src/util/util.h index 4cd96b1bfa6fa2d1090a3a8e7b2c13c309e5c785..8ec6639901d04a4a0b9cb23fb3e3b8e65b947919 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -55,13 +55,19 @@ #define CLEAR_MC_FLAG "clear_mc_flag" +#ifdef HAVE_FUNCTION_ATTRIBUTE_FORMAT +#define SSS_ATTRIBUTE_PRINTF(a1, a2) __attribute__ ((format (printf, a1, a2))) +#else +#define SSS_ATTRIBUTE_PRINTF(a1, a2) +#endif + extern const char *debug_prg_name; extern int debug_level; extern int debug_timestamps; extern int debug_microseconds; extern int debug_to_file; extern const char *debug_log_file; -void debug_fn(const char *format, ...); +void debug_fn(const char *format, ...) SSS_ATTRIBUTE_PRINTF(1, 2); int debug_get_level(int old_level); int debug_convert_old_level(int old_level); errno_t set_debug_file_from_fd(const int fd); @@ -274,7 +280,7 @@ void talloc_log_fn(const char *msg); #define SSS_LOG_INFO 6 /* informational */ #define SSS_LOG_DEBUG 7 /* debug-level messages */ -void sss_log(int priority, const char *format, ...); +void sss_log(int priority, const char *format, ...) SSS_ATTRIBUTE_PRINTF(2, 3); /* from server.c */ struct main_context { -- 1.8.3.1