From 4638dfc1fee80f9338f2941f3cccb17bec63989a Mon Sep 17 00:00:00 2001 From: "Kaleb S. KEITHLEY" Date: Fri, 18 Nov 2016 10:05:12 -0500 Subject: events: use attribute(format(/printf)) to catch fmt string errors and statedump too. Also "const char *" (versus just "char *") for the fmt param. Change-Id: Ic63734a673208a2cd49aebccce7659816e6179e3 BUG: 1399196 Signed-off-by: Kaleb S. KEITHLEY Reviewed-on: https://review.gluster.org/15881 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System --- libglusterfs/src/dict.c | 2 +- libglusterfs/src/events.c | 2 +- libglusterfs/src/events.h | 6 ++++-- libglusterfs/src/latency.c | 2 +- libglusterfs/src/statedump.h | 8 ++++---- xlators/debug/io-stats/src/io-stats.c | 4 ++-- xlators/performance/write-behind/src/write-behind.c | 2 +- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index 96cb9e94bda..a0de0947b1a 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -2983,7 +2983,7 @@ dict_dump_to_statedump (dict_t *dict, char *dict_name, char *domain) "Failed to log dictionary %s", dict_name); return; } - gf_proc_dump_build_key (key, domain, dict_name); + gf_proc_dump_build_key (key, domain, "%s", dict_name); gf_proc_dump_write (key, "%s", dump); return; diff --git a/libglusterfs/src/events.c b/libglusterfs/src/events.c index 27c421a7c74..7c20c32ad6e 100644 --- a/libglusterfs/src/events.c +++ b/libglusterfs/src/events.c @@ -31,7 +31,7 @@ int -_gf_event (eventtypes_t event, char *fmt, ...) +_gf_event (eventtypes_t event, const char *fmt, ...) { int ret = 0; int sock = -1; diff --git a/libglusterfs/src/events.h b/libglusterfs/src/events.h index e059bc9c4d1..19988b0e3d2 100644 --- a/libglusterfs/src/events.h +++ b/libglusterfs/src/events.h @@ -15,10 +15,12 @@ #ifdef USE_EVENTS int -_gf_event (eventtypes_t event, char *fmt, ...); +_gf_event (eventtypes_t event, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); #else +__attribute__ ((__format__ (__printf__, 2, 3))) static inline int -_gf_event (eventtypes_t event, char *fmt, ...) +_gf_event (eventtypes_t event, const char *fmt, ...) { return 0; } diff --git a/libglusterfs/src/latency.c b/libglusterfs/src/latency.c index 611615949fa..5025de6c8cf 100644 --- a/libglusterfs/src/latency.c +++ b/libglusterfs/src/latency.c @@ -164,7 +164,7 @@ gf_proc_dump_latency_info (xlator_t *xl) gf_proc_dump_add_section (key_prefix); for (i = 0; i < GF_FOP_MAXVALUE; i++) { - gf_proc_dump_build_key (key, key_prefix, + gf_proc_dump_build_key (key, key_prefix, "%s", (char *)gf_fop_list[i]); gf_proc_dump_write (key, "%.03f,%"PRId64",%.03f", diff --git a/libglusterfs/src/statedump.h b/libglusterfs/src/statedump.h index 39a68bd69da..0a7a97e10d4 100644 --- a/libglusterfs/src/statedump.h +++ b/libglusterfs/src/statedump.h @@ -37,13 +37,13 @@ typedef struct gf_dump_options_ { extern gf_dump_options_t dump_options; -static inline -void _gf_proc_dump_build_key (char *key, const char *prefix, char *fmt,...) +__attribute__ ((__format__ (__printf__, 3, 4))) +static inline void +_gf_proc_dump_build_key (char *key, const char *prefix, const char *fmt, ...) { - char buf[GF_DUMP_MAX_BUF_LEN]; + char buf[GF_DUMP_MAX_BUF_LEN] = { 0, }; va_list ap; - memset(buf, 0, sizeof(buf)); va_start(ap, fmt); vsnprintf(buf, GF_DUMP_MAX_BUF_LEN, fmt, ap); va_end(ap); diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index 7d33c06b680..d3b3136d982 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -3727,7 +3727,7 @@ io_priv (xlator_t *this) max = conf->cumulative.latency[i].max; avg = conf->cumulative.latency[i].avg; - gf_proc_dump_build_key (key, key_prefix_cumulative, + gf_proc_dump_build_key (key, key_prefix_cumulative, "%s", (char *)gf_fop_list[i]); gf_proc_dump_write (key,"%"PRId64",%"PRId64",%.03f,%.03f,%.03f", @@ -3739,7 +3739,7 @@ io_priv (xlator_t *this) max = conf->incremental.latency[i].max; avg = conf->incremental.latency[i].avg; - gf_proc_dump_build_key (key, key_prefix_incremental, + gf_proc_dump_build_key (key, key_prefix_incremental, "%s", (char *)gf_fop_list[i]); gf_proc_dump_write (key,"%"PRId64",%"PRId64",%.03f,%.03f,%.03f", diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c index 738faea725e..d63c8b5c1d5 100644 --- a/xlators/performance/write-behind/src/write-behind.c +++ b/xlators/performance/write-behind/src/write-behind.c @@ -2784,7 +2784,7 @@ __wb_dump_requests (struct list_head *head, char *prefix) wb_request_t *req = NULL; list_for_each_entry (req, head, all) { - gf_proc_dump_build_key (key_prefix, key, + gf_proc_dump_build_key (key_prefix, key, "%s", (char *)gf_fop_list[req->fop]); gf_proc_dump_add_section(key_prefix); -- cgit