1
0
mirror of https://github.com/Llewellynvdm/starship.git synced 2024-11-28 15:56:28 +00:00

fix(windows): fix windows terminal ANSI escape sequences (#2258)

* fix(windows): don't inherit stdin when executing commands

On Windows, inheriting stdin from starship might lead to leaking the
console reference to the command we're executing. `id.exe` supplied with
Git has been observed to disable the ENABLE_VIRTUAL_TERMINAL_PROCESSING
console flag if it inherits stdin -- leading to Windows Terminal not
processing ANSI escape sequences.

This change fixes #2254 by explicitly disabling stdin inheritance.

The fix was suggested by David Knaack.

* fix(username): don't call `id -u` on Windows

This was done to check if user is root by comparing the UID to 0. Windows
does not have a concept of UID 0 anyway, so it's pointless to call `id.exe`
(which is installed with MSYS2 or Git, for example).
This commit is contained in:
KOVACS Krisztian 2021-02-02 20:58:18 +01:00 committed by GitHub
parent 22dc8b842e
commit c9c3455e23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 2 deletions

View File

@ -21,10 +21,14 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
let username = context.get_env(USERNAME_ENV_VAR)?; let username = context.get_env(USERNAME_ENV_VAR)?;
let logname = context.get_env("LOGNAME"); let logname = context.get_env("LOGNAME");
let is_root = if cfg!(not(target_os = "windows")) {
let user_uid = get_uid(); let user_uid = get_uid();
user_uid == ROOT_UID
} else {
false
};
let is_not_login = logname.is_some() && username != logname.unwrap(); let is_not_login = logname.is_some() && username != logname.unwrap();
let is_root = user_uid == ROOT_UID;
let mut module = context.new_module("username"); let mut module = context.new_module("username");
let config: UsernameConfig = UsernameConfig::try_load(module.config); let config: UsernameConfig = UsernameConfig::try_load(module.config);

View File

@ -277,6 +277,7 @@ fn internal_exec_cmd(cmd: &str, args: &[&str]) -> Option<CommandOutput> {
.args(args) .args(args)
.stderr(Stdio::piped()) .stderr(Stdio::piped())
.stdout(Stdio::piped()) .stdout(Stdio::piped())
.stdin(Stdio::null())
.spawn() .spawn()
{ {
Ok(process) => process, Ok(process) => process,