Skip to content

Commit

Permalink
Ensure buffer for environment is large enough on Solaris
Browse files Browse the repository at this point in the history
  • Loading branch information
BenBE committed May 6, 2022
1 parent db93268 commit 9fc72c1
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions solaris/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,16 +267,21 @@ static int Platform_buildenv(void* accum, struct ps_prochandle* Phandle, uintptr
envAccum* accump = accum;
(void) Phandle;
(void) addr;

size_t thissz = strlen(str);
if ((thissz + 2) > (accump->capacity - accump->size)) {
accump->env = xRealloc(accump->env, accump->capacity *= 2);
}
if ((thissz + 2) > (accump->capacity - accump->size)) {
return 1;

while ((thissz + 2) > (accump->capacity - accump->size)) {
if (accump->capacity > (SIZE_MAX / 2))
return 1;

accump->capacity *= 2;
accump->env = xRealloc(accump->env, accump->capacity);
}
strlcpy( accump->env + accump->size, str, (accump->capacity - accump->size));

strlcpy( accump->env + accump->size, str, accump->capacity - accump->size);
strncpy( accump->env + accump->size + thissz + 1, "\n", 2);
accump->size = accump->size + thissz + 1;

accump->size += thissz + 1;
return 0;
}

Expand All @@ -299,7 +304,8 @@ char* Platform_getProcessEnv(pid_t pid) {
Prelease(Phandle, 0);

strncpy( envBuilder.env + envBuilder.size, "\0", 1);
return envBuilder.env;

return xRealloc(envBuilder.env, envBuilder.size + 1);
}

char* Platform_getInodeFilename(pid_t pid, ino_t inode) {
Expand Down

0 comments on commit 9fc72c1

Please sign in to comment.