[newlib-cygwin/main] fix native symlink spawn passing wrong arg0
Corinna Vinschen
corinna@sourceware.org
Mon Mar 17 19:31:43 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=f74dc93c6359d7821db4166cf03a3748983d721b
commit f74dc93c6359d7821db4166cf03a3748983d721b
Author: Chris Denton <chris@chrisdenton.dev>
AuthorDate: Mon Mar 10 21:08:13 2025 +0000
Commit: Corinna Vinschen <corinna@vinschen.de>
CommitDate: Mon Mar 17 19:58:40 2025 +0100
fix native symlink spawn passing wrong arg0
Currently when starting a process from bash via a native symlink, argv[0] is
set to the realpath of the executable and not to the link name. This patch fixes
it so the path of the symlink is seen instead.
The cause is a path conversion in perhaps_suffix which follows native
symlinks. Hence the fix this patch uses is to add PC_SYM_NOFOLLOW_REP when
calling path_conv::check to prevent that.
Fixes: be371651146c ("* path.cc (path_conv::check): Don't follow reparse point symlinks if PC_SYM_NOFOLLOW_REP flag is set.")
Signed-off-by: Chris Denton <chris@chrisdenton.dev>
Diff:
---
winsup/cygwin/spawn.cc | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index 06b84236d124..ef175e7082f5 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -43,7 +43,9 @@ perhaps_suffix (const char *prog, path_conv& buf, int& err, unsigned opt)
err = 0;
debug_printf ("prog '%s'", prog);
- buf.check (prog, PC_SYM_FOLLOW | PC_NULLEMPTY | PC_POSIX, stat_suffixes);
+ buf.check (prog,
+ PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP | PC_NULLEMPTY | PC_POSIX,
+ stat_suffixes);
if (buf.isdir ())
{
More information about the Cygwin-cvs
mailing list