Browse Source

Hooks: avoid problems with backslashes in paths

Calling sh -c with a script path containing backslashes may fail since
the shell may try to process them as escape characters.

Instead of calling

  sh.exe -c 'C:\path\script "$@"' 'C:\path\script' other args

call

  sh.exe -c '$0 "$@"' 'C:\path\script' other args

which avoids this escape processing.

Note that this is not specific to Windows. If the path or the script
name contain backslashes, this also occurs on Unix.

Bug: 558577
Change-Id: I47d63db6f8644f956c55c42b07dbcad7d7f305aa
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
stable-5.6
Thomas Wolf 5 years ago committed by Matthias Sohn
parent
commit
2323d7a1ef
  1. 2
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java
  2. 2
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java

2
org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java

@ -261,7 +261,7 @@ public class FS_POSIX extends FS {
List<String> argv = new ArrayList<>(4 + args.length); List<String> argv = new ArrayList<>(4 + args.length);
argv.add("sh"); //$NON-NLS-1$ argv.add("sh"); //$NON-NLS-1$
argv.add("-c"); //$NON-NLS-1$ argv.add("-c"); //$NON-NLS-1$
argv.add(cmd + " \"$@\""); //$NON-NLS-1$ argv.add("$0 \"$@\""); //$NON-NLS-1$
argv.add(cmd); argv.add(cmd);
argv.addAll(Arrays.asList(args)); argv.addAll(Arrays.asList(args));
ProcessBuilder proc = new ProcessBuilder(); ProcessBuilder proc = new ProcessBuilder();

2
org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java

@ -149,7 +149,7 @@ public class FS_Win32_Cygwin extends FS_Win32 {
List<String> argv = new ArrayList<>(4 + args.length); List<String> argv = new ArrayList<>(4 + args.length);
argv.add("sh.exe"); //$NON-NLS-1$ argv.add("sh.exe"); //$NON-NLS-1$
argv.add("-c"); //$NON-NLS-1$ argv.add("-c"); //$NON-NLS-1$
argv.add(cmd + " \"$@\""); //$NON-NLS-1$ argv.add("$0 \"$@\""); //$NON-NLS-1$
argv.add(cmd); argv.add(cmd);
argv.addAll(Arrays.asList(args)); argv.addAll(Arrays.asList(args));
ProcessBuilder proc = new ProcessBuilder(); ProcessBuilder proc = new ProcessBuilder();

Loading…
Cancel
Save