From b81d1b5febcb99d7f890beeb7d356678ff1519f6 Mon Sep 17 00:00:00 2001 From: Natsu <139412824+ddy314@users.noreply.github.com> Date: Fri, 16 Oct 2026 21:49:34 +0800 Subject: [PATCH] sysusers: Reject empty mandatory entry types Reject an empty quoted entry type instead of silently ignoring the directive. Empty optional fields continue to preserve subsequent columns. Follow-up to #2534. Assisted-by: AI Signed-off-by: Natsu <139412824+ddy314@users.noreply.github.com> --- crates/sysusers/src/lib.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/sysusers/src/lib.rs b/crates/sysusers/src/lib.rs index 22f2c6b609..0da5faf2ba 100644 --- a/crates/sysusers/src/lib.rs +++ b/crates/sysusers/src/lib.rs @@ -160,7 +160,9 @@ impl SysusersEntry { pub(crate) fn parse(s: &str) -> Result> { let err = || Error::ParseFailure(s.to_owned()); - let (ftype, s) = Self::next_token(s).ok_or_else(err)?; + let (ftype, s) = Self::next_token(s) + .filter(|(token, _)| !token.is_empty()) + .ok_or_else(err)?; let r = match ftype { "u" | "u!" => { let (name, s) = Self::next_token_owned(s).ok_or_else(err)?; @@ -485,7 +487,7 @@ mod tests { "{line}" ); } - for line in [r#"u "" 123"#, r#"g "" 123"#] { + for line in [r#""" user"#, r#"u "" 123"#, r#"g "" 123"#] { assert!(SysusersEntry::parse(line).is_err(), "{line}"); } Ok(())