From 638180f51f6db54d42f48b4e5daabd159d71484a Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sat, 29 Jun 2002 17:26:13 +0000 Subject: * 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. --- winsup/cygwin/environ.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'winsup/cygwin/environ.cc') diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index b86b6b8d1..d0c60edf9 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -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) { -- cgit v1.2.3