* environ.cc (spenv::retrieve): Detect return of env_dontadd from cygheap_user
methods. (build_env): Avoid incrementing environment pointer if not actually adding to the environment. That could result in garbage in the environment table. Be more defensive when reallocing envblock.
This commit is contained in:
parent
38bc119696
commit
638180f51f
|
@ -1,3 +1,11 @@
|
|||
2002-06-29 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* environ.cc (spenv::retrieve): Detect return of env_dontadd from
|
||||
cygheap_user methods.
|
||||
(build_env): Avoid incrementing environment pointer if not actually
|
||||
adding to the environment. That could result in garbage in the
|
||||
environment table. Be more defensive when reallocing envblock.
|
||||
|
||||
2002-06-29 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* uinfo.cc (cygheap_user::test_uid): Return NULL or further tests are
|
||||
|
|
|
@ -826,7 +826,7 @@ spenv::retrieve (bool no_envblock, const char *const envname)
|
|||
|
||||
/* Calculate (potentially) value for given environment variable. */
|
||||
p = (cygheap->user.*from_cygheap) (name, namelen);
|
||||
if (!p || (no_envblock && !envname))
|
||||
if (!p || (no_envblock && !envname) || (p == env_dontadd))
|
||||
return env_dontadd;
|
||||
char *s = (char *) cmalloc (HEAP_1_STR, namelen + strlen (p) + 1);
|
||||
strcpy (s, name);
|
||||
|
@ -898,10 +898,9 @@ build_env (const char * const *envp, char *&envblock, int &envc,
|
|||
if (!saw_spenv[i])
|
||||
{
|
||||
*dstp = spenvs[i].retrieve (no_envblock);
|
||||
if (*dstp && *dstp != env_dontadd)
|
||||
if (*dstp && *dstp != env_dontadd && !no_envblock)
|
||||
{
|
||||
if (!no_envblock)
|
||||
tl += strlen (*dstp) + 1;
|
||||
tl += strlen (*dstp) + 1;
|
||||
dstp++;
|
||||
}
|
||||
}
|
||||
|
@ -941,8 +940,9 @@ build_env (const char * const *envp, char *&envblock, int &envc,
|
|||
/* See if we need to increase the size of the block. */
|
||||
if (new_tl > tl)
|
||||
{
|
||||
tl = new_tl + 100;
|
||||
char *new_envblock =
|
||||
(char *) realloc (envblock, 2 + (tl += len + 100));
|
||||
(char *) realloc (envblock, 2 + tl);
|
||||
/* If realloc moves the block, move `s' with it. */
|
||||
if (new_envblock != envblock)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue