chiark / gitweb /
util-lib: drop trailing non-printable characters from cmdline (#3512)
[elogind.git] / src / basic / process-util.c
index faadb756cc239c6cc8933680d81134e53d50bc13..bcc5a45d8ebc633e46c6f149bd10fa8018561d16 100644 (file)
@@ -101,6 +101,7 @@ int get_process_comm(pid_t pid, char **name) {
 
 int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line) {
         _cleanup_fclose_ FILE *f = NULL;
+        bool space = false;
         char *r = NULL, *k;
         const char *p;
         int c;
@@ -127,14 +128,21 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
                                 return -ENOMEM;
                         }
 
-                        r[len++] = isprint(c) ? c : ' ';
-                }
+                        if (isprint(c)) {
+                                if (space) {
+                                        r[len++] = ' ';
+                                        space = false;
+                                }
+
+                                r[len++] = c;
+                        } else
+                                space = true;
+               }
 
                 if (len > 0)
-                        r[len-1] = 0;
+                        r[len] = 0;
 
         } else {
-                bool space = false;
                 size_t left;
 
                 r = new(char, max_length);