core: Clean up command line extraction.
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Sun, 5 Feb 2017 04:11:51 +0000 (23:11 -0500)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Thu, 12 Oct 2017 21:12:10 +0000 (17:12 -0400)
* pinentry/pinentry.c (get_cmdline): Avoid trailing space, and return
NULL when no bytes were read from /proc.

Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
pinentry/pinentry.c

index 5f7912a..3303c77 100644 (file)
@@ -413,14 +413,16 @@ get_cmdline (unsigned long pid)
       fclose (fp);
       return NULL;
     }
-  /* Arguments are delimites by Nuls.  We should do proper quoting but
+  fclose (fp);
+  if (n == 0)
+    return NULL;
+  /* Arguments are delimited by Nuls.  We should do proper quoting but
    * that can be a bit complicated, thus we simply replace the Nuls by
    * spaces.  */
   for (i=0; i < n; i++)
-    if (!buffer[i])
+    if (!buffer[i] && i < n-1)
       buffer[i] = ' ';
   buffer[i] = 0; /* Make sure the last byte is the string terminator.  */
-  fclose (fp);
 
   return strdup (buffer);
 }