Fix readlink's do-while-loop
The function pid_link tries to handle programs which contain very long paths to their executables. If 1024 bytes are not enough to contain the path, the loop wants to get more and more space until the path can fit. The loop's condition does not fit though. readlink will never return a value higher than its supplied size limit, which is "path_alloc_size - 1", therefore the loop-check of "len == path_alloc_size" will always be false: the loop will never be repeated. While at it, the if-condition inside the loop's body can be omitted, because it is always true.
This commit is contained in:
parent
30986cb22e
commit
e8430bad00
12
pidof.c
12
pidof.c
@ -103,20 +103,18 @@ static char *pid_link (pid_t pid, const char *base_name)
|
||||
{
|
||||
char link [PROCPATHLEN];
|
||||
char *result;
|
||||
int path_alloc_size;
|
||||
int len;
|
||||
ssize_t path_alloc_size;
|
||||
ssize_t len;
|
||||
|
||||
snprintf(link, sizeof(link), "/proc/%d/%s", pid, base_name);
|
||||
|
||||
len = path_alloc_size = 0;
|
||||
result = NULL;
|
||||
do {
|
||||
if (len == path_alloc_size) {
|
||||
grow_size (path_alloc_size);
|
||||
result = (char *) xrealloc (result, path_alloc_size);
|
||||
}
|
||||
grow_size(path_alloc_size);
|
||||
result = xrealloc(result, path_alloc_size);
|
||||
|
||||
if ((len = readlink(link, result, path_alloc_size - 1)) < 0) {
|
||||
if ((len = readlink(link, result, path_alloc_size)) < 0) {
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user