processes plugin: fix build warning
authorRuben Kerkhof <ruben@rubenkerkhof.com>
Sun, 2 Jul 2017 19:48:50 +0000 (21:48 +0200)
committerRuben Kerkhof <ruben@rubenkerkhof.com>
Sun, 2 Jul 2017 19:48:50 +0000 (21:48 +0200)
  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

index 17918c4..4fec161 100644 (file)
@@ -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;