diff --git a/src/uu/env/src/env.rs b/src/uu/env/src/env.rs index 4d99e3302..ec9360ad4 100644 --- a/src/uu/env/src/env.rs +++ b/src/uu/env/src/env.rs @@ -163,7 +163,9 @@ fn load_config_file(opts: &mut Options) -> UResult<()> { for (_, prop) in &conf { // ignore all INI section lines (treat them as comments) for (key, value) in prop { - env::set_var(key, value); + unsafe { + env::set_var(key, value); + } } } } @@ -559,7 +561,9 @@ fn apply_removal_of_all_env_vars(opts: &Options<'_>) { // remove all env vars if told to ignore presets if opts.ignore_env { for (ref name, _) in env::vars_os() { - env::remove_var(name); + unsafe { + env::remove_var(name); + } } } } @@ -634,8 +638,9 @@ fn apply_unset_env_vars(opts: &Options<'_>) -> Result<(), Box> { format!("cannot unset {}: Invalid argument", name.quote()), )); } - - env::remove_var(name); + unsafe { + env::remove_var(name); + } } Ok(()) } @@ -692,7 +697,9 @@ fn apply_specified_env_vars(opts: &Options<'_>) { show_warning!("no name specified for value {}", val.quote()); continue; } - env::set_var(name, val); + unsafe { + env::set_var(name, val); + } } } diff --git a/src/uu/sort/src/sort.rs b/src/uu/sort/src/sort.rs index 645d32023..c1247aa00 100644 --- a/src/uu/sort/src/sort.rs +++ b/src/uu/sort/src/sort.rs @@ -1111,7 +1111,9 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { .get_one::(options::PARALLEL) .map(String::from) .unwrap_or_else(|| "0".to_string()); - env::set_var("RAYON_NUM_THREADS", &settings.threads); + unsafe { + env::set_var("RAYON_NUM_THREADS", &settings.threads); + } } settings.buffer_size = diff --git a/src/uu/split/src/platform/unix.rs b/src/uu/split/src/platform/unix.rs index 1e29739e2..451abef92 100644 --- a/src/uu/split/src/platform/unix.rs +++ b/src/uu/split/src/platform/unix.rs @@ -49,7 +49,9 @@ impl WithEnvVarSet { /// Save previous value assigned to key, set key=value fn new(key: &str, value: &str) -> Self { let previous_env_value = env::var(key); - env::set_var(key, value); + unsafe { + env::set_var(key, value); + } Self { _previous_var_key: String::from(key), _previous_var_value: previous_env_value, @@ -61,9 +63,13 @@ impl Drop for WithEnvVarSet { /// Restore previous value now that this is being dropped by context fn drop(&mut self) { if let Ok(ref prev_value) = self._previous_var_value { - env::set_var(&self._previous_var_key, prev_value); + unsafe { + env::set_var(&self._previous_var_key, prev_value); + } } else { - env::remove_var(&self._previous_var_key); + unsafe { + env::remove_var(&self._previous_var_key); + } } } } diff --git a/src/uu/stdbuf/src/libstdbuf/src/libstdbuf.rs b/src/uu/stdbuf/src/libstdbuf/src/libstdbuf.rs index 375ae5f2d..f365fe596 100644 --- a/src/uu/stdbuf/src/libstdbuf/src/libstdbuf.rs +++ b/src/uu/stdbuf/src/libstdbuf/src/libstdbuf.rs @@ -64,7 +64,7 @@ fn set_buffer(stream: *mut FILE, value: &str) { /// # Safety /// ToDO ... (safety note) -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn __stdbuf() { if let Ok(val) = env::var("_STDBUF_E") { set_buffer(__stdbuf_get_stderr(), &val); diff --git a/tests/by-util/test_dircolors.rs b/tests/by-util/test_dircolors.rs index 53f79f5ae..e5fba5eb5 100644 --- a/tests/by-util/test_dircolors.rs +++ b/tests/by-util/test_dircolors.rs @@ -16,25 +16,43 @@ fn test_invalid_arg() { fn test_shell_syntax() { use std::env; let last = env::var("SHELL"); - env::set_var("SHELL", "/path/csh"); + unsafe { + env::set_var("SHELL", "/path/csh"); + } assert_eq!(OutputFmt::CShell, guess_syntax()); - env::set_var("SHELL", "csh"); + unsafe { + env::set_var("SHELL", "csh"); + } assert_eq!(OutputFmt::CShell, guess_syntax()); - env::set_var("SHELL", "/path/bash"); + unsafe { + env::set_var("SHELL", "/path/bash"); + } assert_eq!(OutputFmt::Shell, guess_syntax()); - env::set_var("SHELL", "bash"); + unsafe { + env::set_var("SHELL", "bash"); + } assert_eq!(OutputFmt::Shell, guess_syntax()); - env::set_var("SHELL", "/asd/bar"); + unsafe { + env::set_var("SHELL", "/asd/bar"); + } assert_eq!(OutputFmt::Shell, guess_syntax()); - env::set_var("SHELL", "foo"); + unsafe { + env::set_var("SHELL", "foo"); + } assert_eq!(OutputFmt::Shell, guess_syntax()); - env::set_var("SHELL", ""); + unsafe { + env::set_var("SHELL", ""); + } assert_eq!(OutputFmt::Unknown, guess_syntax()); - env::remove_var("SHELL"); + unsafe { + env::remove_var("SHELL"); + } assert_eq!(OutputFmt::Unknown, guess_syntax()); if let Ok(s) = last { - env::set_var("SHELL", s); + unsafe { + env::set_var("SHELL", s); + } } } diff --git a/tests/by-util/test_split.rs b/tests/by-util/test_split.rs index c21299eaa..494505715 100644 --- a/tests/by-util/test_split.rs +++ b/tests/by-util/test_split.rs @@ -324,7 +324,9 @@ fn test_filter_with_env_var_set() { RandomFile::new(&at, name).add_lines(n_lines); let env_var_value = "some-value"; - env::set_var("FILE", env_var_value); + unsafe { + env::set_var("FILE", env_var_value); + } ucmd.args(&[format!("--filter={}", "cat > $FILE").as_str(), name]) .succeeds();