diff options
Diffstat (limited to 'session.c')
-rw-r--r-- | session.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -844,8 +844,9 @@ static void | |||
844 | child_set_env(char ***envp, u_int *envsizep, const char *name, | 844 | child_set_env(char ***envp, u_int *envsizep, const char *name, |
845 | const char *value) | 845 | const char *value) |
846 | { | 846 | { |
847 | u_int i, namelen; | ||
848 | char **env; | 847 | char **env; |
848 | u_int envsize; | ||
849 | u_int i, namelen; | ||
849 | 850 | ||
850 | /* | 851 | /* |
851 | * Find the slot where the value should be stored. If the variable | 852 | * Find the slot where the value should be stored. If the variable |
@@ -862,12 +863,13 @@ child_set_env(char ***envp, u_int *envsizep, const char *name, | |||
862 | xfree(env[i]); | 863 | xfree(env[i]); |
863 | } else { | 864 | } else { |
864 | /* New variable. Expand if necessary. */ | 865 | /* New variable. Expand if necessary. */ |
865 | if (i >= (*envsizep) - 1) { | 866 | envsize = *envsizep; |
866 | if (*envsizep >= 1000) | 867 | if (i >= envsize - 1) { |
867 | fatal("child_set_env: too many env vars," | 868 | if (envsize >= 1000) |
868 | " skipping: %.100s", name); | 869 | fatal("child_set_env: too many env vars"); |
869 | (*envsizep) += 50; | 870 | envsize += 50; |
870 | env = (*envp) = xrealloc(env, (*envsizep) * sizeof(char *)); | 871 | env = (*envp) = xrealloc(env, envsize * sizeof(char *)); |
872 | *envsizep = envsize; | ||
871 | } | 873 | } |
872 | /* Need to set the NULL pointer at end of array beyond the new slot. */ | 874 | /* Need to set the NULL pointer at end of array beyond the new slot. */ |
873 | env[i + 1] = NULL; | 875 | env[i + 1] = NULL; |