]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: cygwin_GetCommandLineW/A: don't rely on __argv[0] content
authorCorinna Vinschen <corinna@vinschen.de>
Wed, 31 Jan 2024 12:30:05 +0000 (13:30 +0100)
committerCorinna Vinschen <corinna@vinschen.de>
Wed, 31 Jan 2024 19:11:58 +0000 (20:11 +0100)
Since it's possible to change the __argv array, we should not rely
on __argv[0] actually representing the windows executable path in
any way.  Use the real path stored in global_progname instead.

Fixes: 521953a83a885 ("* common.din: Export GetCommandLine{A,W}.")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
winsup/cygwin/kernel32.cc

index 36951f6a87be757a052ea426c4d24cdb2b88e0ee..f07f80d59ddc5dc97c689d6767d839d092ea58a3 100644 (file)
@@ -419,14 +419,17 @@ static UNICODE_STRING *
 ucmd ()
 {
   static UNICODE_STRING wcmd;
+  tmp_pathbuf tp;
+
   if (!wcmd.Buffer)
     {
       linebuf cmd;
-      path_conv real_path (__argv[0]);
+      char *win_progname = tp.c_get ();
+      sys_wcstombs (win_progname, NT_MAX_PATH, global_progname);
       av newargv (__argc, __argv);
       if (newargv.argc)
        {
-         cmd.fromargv (newargv, real_path.get_win32 (), true);
+         cmd.fromargv (newargv, win_progname, true);
          RtlInitUnicodeString (&wcmd, cmd);
        }
     }
This page took 0.032408 seconds and 5 git commands to generate.