Enusure that the output arguments are not changed on the library __(w)getmainargs function failure. --- mingw-w64-crt/misc/msvcrt__getmainargs.c | 13 ++++++++----- mingw-w64-crt/misc/msvcrt__wgetmainargs.c | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/mingw-w64-crt/misc/msvcrt__getmainargs.c b/mingw-w64-crt/misc/msvcrt__getmainargs.c index f0a37d960e44..9f43e8ad8a82 100644 --- a/mingw-w64-crt/misc/msvcrt__getmainargs.c +++ b/mingw-w64-crt/misc/msvcrt__getmainargs.c @@ -28,12 +28,15 @@ int __cdecl __getmainargs(int *argc, char ***argv, char ***envp, int expand_wild * it is just redirect to the msvcrt.dll __getmainargs() function. And * since Windows XP, this function has int return type. */ - *argc = -1; - *argv = NULL; - *envp = NULL; - (void)__msvcrt_getmainargs(argc, argv, envp, expand_wildcards, startup_info); - if (*argc == -1 || *argv == NULL || *envp == NULL) + int local_argc = -1; + char **local_argv = NULL; + char **local_envp = NULL; + (void)__msvcrt_getmainargs(&local_argc, &local_argv, &local_envp, expand_wildcards, startup_info); + if (local_argc == -1 || local_argv == NULL || local_envp == NULL) return -1; + *argc = local_argc; + *argv = local_argv; + *envp = local_envp; return 0; } int __cdecl (*__MINGW_IMP_SYMBOL(__getmainargs))(int *, char ***, char ***, int, _startupinfo *) = __getmainargs; diff --git a/mingw-w64-crt/misc/msvcrt__wgetmainargs.c b/mingw-w64-crt/misc/msvcrt__wgetmainargs.c index f18549951ff7..eba017f88d82 100644 --- a/mingw-w64-crt/misc/msvcrt__wgetmainargs.c +++ b/mingw-w64-crt/misc/msvcrt__wgetmainargs.c @@ -28,12 +28,15 @@ int __cdecl __wgetmainargs(int *argc, wchar_t ***argv, wchar_t ***envp, int expa * it is just redirect to the msvcrt.dll __wgetmainargs() function. And * since Windows XP, this function has int return type. */ - *argc = -1; - *argv = NULL; - *envp = NULL; - (void)__msvcrt_wgetmainargs(argc, argv, envp, expand_wildcards, startup_info); - if (*argc == -1 || *argv == NULL || *envp == NULL) + int local_argc = -1; + wchar_t **local_argv = NULL; + wchar_t **local_envp = NULL; + (void)__msvcrt_wgetmainargs(&local_argc, &local_argv, &local_envp, expand_wildcards, startup_info); + if (local_argc == -1 || local_argv == NULL || local_envp == NULL) return -1; + *argc = local_argc; + *argv = local_argv; + *envp = local_envp; return 0; } int __cdecl (*__MINGW_IMP_SYMBOL(__wgetmainargs))(int *, wchar_t ***, wchar_t ***, int, _startupinfo *) = __wgetmainargs; -- 2.20.1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public