diff --git a/src/uu/id/src/id.rs b/src/uu/id/src/id.rs index 83a6d066f..47e6af1ad 100644 --- a/src/uu/id/src/id.rs +++ b/src/uu/id/src/id.rs @@ -47,7 +47,15 @@ use uucore::{format_usage, help_about, help_section, help_usage, show_error}; macro_rules! cstr2cow { ($v:expr) => { - unsafe { CStr::from_ptr($v).to_string_lossy() } + unsafe { + let ptr = $v; + // Must be not null to call cstr2cow + if ptr.is_null() { + None + } else { + Some({ CStr::from_ptr(ptr) }.to_string_lossy()) + } + } }; } @@ -451,8 +459,8 @@ fn pretty(possible_pw: Option) { let login = cstr2cow!(getlogin().cast_const()); let rid = getuid(); if let Ok(p) = Passwd::locate(rid) { - if login == p.name { - println!("login\t{login}"); + if let Some(user_name) = login { + println!("login\t{user_name}"); } println!("uid\t{}", p.name); } else { diff --git a/tests/by-util/test_id.rs b/tests/by-util/test_id.rs index 2b3eee659..3418739d1 100644 --- a/tests/by-util/test_id.rs +++ b/tests/by-util/test_id.rs @@ -152,19 +152,8 @@ fn test_id_real() { fn test_id_pretty_print() { // `-p` is BSD only and not supported on GNU's `id` let username = whoami(); - let result = new_ucmd!().arg("-p").run(); - if result.stdout_str().trim().is_empty() { - // this fails only on: "MinRustV (ubuntu-latest, feat_os_unix)" - // `rustc 1.40.0 (73528e339 2019-12-16)` - // run: /home/runner/work/coreutils/coreutils/target/debug/coreutils id -p - // thread 'test_id::test_id_pretty_print' panicked at 'Command was expected to succeed. - // stdout = - // stderr = ', tests/common/util.rs:157:13 - println!("test skipped:"); - } else { - result.success().stdout_contains(username); - } + result.success().stdout_contains(username); } #[test]