1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

Fix unsafe attribute used without unsafe

This commit is contained in:
Sylvestre Ledru 2025-03-08 14:39:47 +01:00
parent e0fbced116
commit 2739c19330
6 changed files with 55 additions and 20 deletions

17
src/uu/env/src/env.rs vendored
View file

@ -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<dyn UError>> {
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);
}
}
}

View file

@ -1111,7 +1111,9 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
.get_one::<String>(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 =

View file

@ -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);
}
}
}
}

View file

@ -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);

View file

@ -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);
}
}
}

View file

@ -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();