diff options
Diffstat (limited to 'shell/ash.c')
-rw-r--r-- | shell/ash.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c index ad1e5ba7e..6d7066a1b 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -8898,9 +8898,11 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) const char *cmd, char **argv, c | |||
8898 | # else | 8898 | # else |
8899 | if (APPLET_IS_NOEXEC(applet_no)) { | 8899 | if (APPLET_IS_NOEXEC(applet_no)) { |
8900 | # endif | 8900 | # endif |
8901 | #if !defined(_UCRT) | ||
8901 | clearenv(); | 8902 | clearenv(); |
8902 | while (*envp) | 8903 | while (*envp) |
8903 | putenv(*envp++); | 8904 | putenv(*envp++); |
8905 | #endif | ||
8904 | popredir(/*drop:*/ 1); | 8906 | popredir(/*drop:*/ 1); |
8905 | run_noexec_applet_and_exit(applet_no, cmd, argv); | 8907 | run_noexec_applet_and_exit(applet_no, cmd, argv); |
8906 | } | 8908 | } |
@@ -8973,6 +8975,14 @@ static void shellexec(char *prog, char **argv, const char *path, int idx) | |||
8973 | #if !ENABLE_PLATFORM_MINGW32 | 8975 | #if !ENABLE_PLATFORM_MINGW32 |
8974 | if (strchr(prog, '/') != NULL | 8976 | if (strchr(prog, '/') != NULL |
8975 | #else | 8977 | #else |
8978 | #if defined(_UCRT) | ||
8979 | /* Avoid UCRT bug by updating parent's environment and passing a | ||
8980 | * NULL environment pointer to execve(). */ | ||
8981 | clearenv(); | ||
8982 | while (*envp) | ||
8983 | putenv(*envp++); | ||
8984 | envp = NULL; | ||
8985 | #endif | ||
8976 | if (has_path(prog) | 8986 | if (has_path(prog) |
8977 | #endif | 8987 | #endif |
8978 | #if ENABLE_FEATURE_SH_STANDALONE | 8988 | #if ENABLE_FEATURE_SH_STANDALONE |