From: Ruben Kerkhof Date: Sun, 2 Jul 2017 19:48:50 +0000 (+0200) Subject: processes plugin: fix build warning X-Git-Tag: collectd-5.8.0~118^2~5 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=d9ea74670fed814b2646f12fb22929cd03f99886 processes plugin: fix build warning CC src/processes.lo src/processes.c: In function ‘ps_read’: src/processes.c:823:58: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size between 32 and 51 [-Wformat-truncation=] snprintf(filename, sizeof(filename), "/proc/%li/task/%s/status", ps->id, ^~ src/processes.c:823:5: note: ‘snprintf’ output between 21 and 295 bytes into a destination of size 64 snprintf(filename, sizeof(filename), "/proc/%li/task/%s/status", ps->id, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tpid); ~~~~~ In practice the buffer is more than large enough, since all we substitute are process ids, but gcc can't know that. --- diff --git a/src/processes.c b/src/processes.c index 17918c47..4fec161e 100644 --- a/src/processes.c +++ b/src/processes.c @@ -820,8 +820,12 @@ static int ps_read_tasks_status(process_entry_t *ps) { tpid = ent->d_name; - snprintf(filename, sizeof(filename), "/proc/%li/task/%s/status", ps->id, - tpid); + if (snprintf(filename, sizeof(filename), "/proc/%li/task/%s/status", ps->id, + tpid) >= sizeof(filename)) { + DEBUG("Filename too long: `%s'", filename); + continue; + } + if ((fh = fopen(filename, "r")) == NULL) { DEBUG("Failed to open file `%s'", filename); continue;