From d9ea74670fed814b2646f12fb22929cd03f99886 Mon Sep 17 00:00:00 2001 From: Ruben Kerkhof Date: Sun, 2 Jul 2017 21:48:50 +0200 Subject: [PATCH] processes plugin: fix build warning MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- src/processes.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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; -- 2.11.0