]> granicus.if.org Git - psmisc/commitdiff
pslog: fix unterminated string and memory leaks
authorVito Mule <mulevito@gmail.com>
Sun, 1 May 2016 01:52:57 +0000 (02:52 +0100)
committerVito Mule <mulevito@gmail.com>
Sun, 1 May 2016 01:52:57 +0000 (02:52 +0100)
src/pslog.c

index f0aa83c09584003a4eb57913d77cd6db6e54d437..7e3351e2647331505a985783594bbb5ae1b5cbcb 100644 (file)
@@ -35,7 +35,7 @@
 static int
 usage ()
 {
-   fprintf(stderr,
+  fprintf(stderr,
     "Usage: pslog PID...\n"
     "       pslog -V, --version\n\n"
 
@@ -112,6 +112,7 @@ main(int argc, char const *argv[])
     return 1;
   }
 
+  ssize_t linkname_size;
   char buf[PATH_MAX+1];
   DIR *pid_dir;
 
@@ -135,7 +136,8 @@ main(int argc, char const *argv[])
   while((namelist = readdir(pid_dir))) {
     strncpy(linkpath, fullpath, PATH_MAX);
     strncat(linkpath, namelist->d_name, PATH_MAX - strlen(linkpath));
-    readlink(linkpath, buf, PATH_MAX -1);
+    linkname_size = readlink(linkpath, buf, PATH_MAX -1);
+    buf[linkname_size+1] = '\0';
 
     if (regexec(&re_log, buf, 0, NULL, 0) == 0) {
       fprintf(stdout, "Log path: %s\n", buf);
@@ -147,5 +149,11 @@ main(int argc, char const *argv[])
   free(linkpath);
   free(fullpath);
   regfree(&re_log);
+
+  if (closedir(pid_dir)) {
+    perror ("closedir");
+    return 1;
+  }
+
   return 0;
 }