Pārlūkot izejas kodu

fix Sys.command for windows: always escape cmd, wrap resulting command in quotes before executing (see #3402)

Dan Korostelev 11 gadi atpakaļ
vecāks
revīzija
c0406cc928
3 mainītis faili ar 6 papildinājumiem un 3 dzēšanām
  1. 2 1
      std/cpp/_std/Sys.hx
  2. 2 1
      std/neko/_std/Sys.hx
  3. 2 1
      std/php/_std/Sys.hx

+ 2 - 1
std/cpp/_std/Sys.hx

@@ -96,11 +96,12 @@
 	}
 
 	public static function command( cmd : String, ?args : Array<String> ) : Int {
+		cmd = escapeArgument(cmd);
 		if( args != null ) {
-			cmd = escapeArgument(cmd);
 			for( a in args )
 				cmd += " "+escapeArgument(a);
 		}
+		if (systemName() == "Windows") cmd = '"$cmd"';
 		return sys_command(cmd);
 	}
 

+ 2 - 1
std/neko/_std/Sys.hx

@@ -106,11 +106,12 @@
 	}
 
 	public static function command( cmd : String, ?args : Array<String> ) : Int {
+		cmd = escapeArgument(cmd);
 		if( args != null ) {
-			cmd = escapeArgument(cmd);
 			for( a in args )
 				cmd += " "+escapeArgument(a);
 		}
+		if (systemName() == "Windows") cmd = '"$cmd"';
 		return sys_command(untyped cmd.__s);
 	}
 

+ 2 - 1
std/php/_std/Sys.hx

@@ -84,11 +84,12 @@
 	}
 
 	public static function command( cmd : String, ?args : Array<String> ) : Int {
+		cmd = escapeArgument(cmd);
 		if( args != null ) {
-			cmd = escapeArgument(cmd);
 			for( a in args )
 				cmd += " "+escapeArgument(a);
 		}
+		if (systemName() == "Windows") cmd = '"$cmd"';
 		var result = 0;
 		untyped __call__("system", cmd, result);
 		return result;