From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id E54B43858015; Thu, 1 Feb 2024 11:39:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E54B43858015 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1706787595; bh=XZYc/mThMNbAlhH/vnPl+7PbctZXt64hQW8/aTpJam8=; h=From:To:Subject:Date:From; b=dlTptGjLbohzZxxYuj3ZN6XXaBpmeBuYUnfZRaZDG49By98+6X/4rqP4dPQMEazNr HigOiSKWHoJW/8rhKSAtHt75mwloEw+Xakdew7RlSydUIYpSdFu7vWHRYlux8Ragn6 /wwVZoMQrWcWbVLUQ1vijlzmkt+LkXoWiYVVJqCU= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/main] Cygwin: cygwin_GetCommandLineW/A: don't rely on __argv[0] content X-Act-Checkin: newlib-cygwin X-Git-Author: Corinna Vinschen X-Git-Refname: refs/heads/main X-Git-Oldrev: 1ce9756ee61e8dff5e3319851e14ebf310a0bdd8 X-Git-Newrev: bded8091c438d18e1d259864d773891a747c7576 Message-Id: <20240201113955.E54B43858015@sourceware.org> Date: Thu, 1 Feb 2024 11:39:55 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3Dbded8091c43= 8d18e1d259864d773891a747c7576 commit bded8091c438d18e1d259864d773891a747c7576 Author: Corinna Vinschen AuthorDate: Wed Jan 31 13:30:05 2024 +0100 Commit: Corinna Vinschen CommitDate: Wed Jan 31 20:11:58 2024 +0100 Cygwin: cygwin_GetCommandLineW/A: don't rely on __argv[0] content =20 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. =20 Fixes: 521953a83a885 ("* common.din: Export GetCommandLine{A,W}.") Signed-off-by: Corinna Vinschen Diff: --- winsup/cygwin/kernel32.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/kernel32.cc b/winsup/cygwin/kernel32.cc index 36951f6a87be..f07f80d59ddc 100644 --- a/winsup/cygwin/kernel32.cc +++ b/winsup/cygwin/kernel32.cc @@ -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 =3D 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); } }