Ver Fonte

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

Dan Korostelev há 11 anos atrás
pai
commit
c0406cc928
3 ficheiros alterados com 6 adições e 3 exclusões
  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 {
 	public static function command( cmd : String, ?args : Array<String> ) : Int {
+		cmd = escapeArgument(cmd);
 		if( args != null ) {
 		if( args != null ) {
-			cmd = escapeArgument(cmd);
 			for( a in args )
 			for( a in args )
 				cmd += " "+escapeArgument(a);
 				cmd += " "+escapeArgument(a);
 		}
 		}
+		if (systemName() == "Windows") cmd = '"$cmd"';
 		return sys_command(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 {
 	public static function command( cmd : String, ?args : Array<String> ) : Int {
+		cmd = escapeArgument(cmd);
 		if( args != null ) {
 		if( args != null ) {
-			cmd = escapeArgument(cmd);
 			for( a in args )
 			for( a in args )
 				cmd += " "+escapeArgument(a);
 				cmd += " "+escapeArgument(a);
 		}
 		}
+		if (systemName() == "Windows") cmd = '"$cmd"';
 		return sys_command(untyped cmd.__s);
 		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 {
 	public static function command( cmd : String, ?args : Array<String> ) : Int {
+		cmd = escapeArgument(cmd);
 		if( args != null ) {
 		if( args != null ) {
-			cmd = escapeArgument(cmd);
 			for( a in args )
 			for( a in args )
 				cmd += " "+escapeArgument(a);
 				cmd += " "+escapeArgument(a);
 		}
 		}
+		if (systemName() == "Windows") cmd = '"$cmd"';
 		var result = 0;
 		var result = 0;
 		untyped __call__("system", cmd, result);
 		untyped __call__("system", cmd, result);
 		return result;
 		return result;