mirror of
https://github.com/xzeldon/htop.git
synced 2024-12-23 22:55:46 +00:00
A few more OpenBSD fixes
Namely: o use malloc where an xCalloc slipped in o safeguard against an empty arg list - I don't think it's possible, but it would be potentially exploitable o we need to initialize the arg string to an empty string because we no longer use strlcpy(3) o annotate a tricky use of strlcpy(3)'s truncation
This commit is contained in:
parent
b08cb7352e
commit
4b780a3499
@ -161,7 +161,7 @@ char *OpenBSDProcessList_readProcessName(kvm_t* kd, struct kinfo_proc* kproc, in
|
||||
* (argv[0]) if we fail to construct the full command.
|
||||
*/
|
||||
arg = kvm_getargv(kd, kproc, 500);
|
||||
if (arg == NULL) {
|
||||
if (arg == NULL || *arg == NULL) {
|
||||
*basenameEnd = strlen(kproc->p_comm);
|
||||
return xStrdup(kproc->p_comm);
|
||||
}
|
||||
@ -169,18 +169,23 @@ char *OpenBSDProcessList_readProcessName(kvm_t* kd, struct kinfo_proc* kproc, in
|
||||
len += strlen(arg[i]) + 1; /* room for arg and trailing space or NUL */
|
||||
}
|
||||
/* don't use xMalloc here - we want to handle huge argv's gracefully */
|
||||
if ((s = xCalloc(len, 1)) == NULL) {
|
||||
if ((s = malloc(len)) == NULL) {
|
||||
*basenameEnd = strlen(kproc->p_comm);
|
||||
return xStrdup(kproc->p_comm);
|
||||
}
|
||||
|
||||
*s = '\0';
|
||||
|
||||
for (i = 0; arg[i] != NULL; i++) {
|
||||
n = strlcat(s, arg[i], len);
|
||||
if (i == 0) {
|
||||
/* TODO: rename all basenameEnd to basenameLen, make size_t */
|
||||
*basenameEnd = MINIMUM(n, len-1);
|
||||
}
|
||||
/* the trailing space should get truncated anyway */
|
||||
strlcat(s, " ", len);
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user