Use strlcpy instead of strncpy

Also make sure the read cmdline is terminated with a null byte.

Change-Id: I6b4aa197ce9bc072a912b7163e8616a03b39c3fe
This commit is contained in:
Kenny Root 2011-12-01 11:38:53 -08:00
parent 6940ec41d1
commit b953fc2849

View file

@ -178,8 +178,7 @@ void lsof_dumpinfo(pid_t pid)
if (!stat(info.path, &pidstat)) {
pw = getpwuid(pidstat.st_uid);
if (pw) {
strncpy(info.user, pw->pw_name, USER_DISPLAY_MAX - 1);
info.user[USER_DISPLAY_MAX - 1] = '\0';
strlcpy(info.user, pw->pw_name, sizeof(info.user));
} else {
snprintf(info.user, USER_DISPLAY_MAX, "%d", (int)pidstat.st_uid);
}
@ -194,18 +193,20 @@ void lsof_dumpinfo(pid_t pid)
fprintf(stderr, "Couldn't read %s\n", info.path);
return;
}
char cmdline[PATH_MAX];
if (read(fd, cmdline, sizeof(cmdline)) < 0) {
int numRead = read(fd, cmdline, sizeof(cmdline) - 1);
close(fd);
if (numRead < 0) {
fprintf(stderr, "Error reading cmdline: %s: %s\n", info.path, strerror(errno));
close(fd);
return;
}
close(fd);
info.path[info.parent_length] = '\0';
cmdline[numRead] = '\0';
// We only want the basename of the cmdline
strncpy(info.cmdline, basename(cmdline), sizeof(info.cmdline));
info.cmdline[sizeof(info.cmdline)-1] = '\0';
strlcpy(info.cmdline, basename(cmdline), sizeof(info.cmdline));
// Read each of these symlinks
print_type("cwd", &info);