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

Reply via email to