From 412a81e7bf355c8983f31933f948b0e0d5b9fc57 Mon Sep 17 00:00:00 2001 From: Jan Verbeek Date: Fri, 27 Aug 2021 14:38:05 +0200 Subject: [PATCH] uucore::entries: Remove unnecessary unsafe Vec operations --- src/uucore/src/lib/features/entries.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/uucore/src/lib/features/entries.rs b/src/uucore/src/lib/features/entries.rs index e5cba67f5..14908b796 100644 --- a/src/uucore/src/lib/features/entries.rs +++ b/src/uucore/src/lib/features/entries.rs @@ -41,6 +41,7 @@ use libc::{c_char, c_int, gid_t, uid_t}; use libc::{getgrgid, getgrnam, getgroups}; use libc::{getpwnam, getpwuid, group, passwd}; +use std::convert::TryInto; use std::ffi::{CStr, CString}; use std::io::Error as IOError; use std::io::ErrorKind; @@ -75,14 +76,14 @@ pub fn get_groups() -> IOResult> { if ngroups == -1 { return Err(IOError::last_os_error()); } - let mut groups = Vec::with_capacity(ngroups as usize); + let mut groups = vec![0; ngroups.try_into().unwrap()]; let ngroups = unsafe { getgroups(ngroups, groups.as_mut_ptr()) }; if ngroups == -1 { Err(IOError::last_os_error()) } else { - unsafe { - groups.set_len(ngroups as usize); - } + let ngroups = ngroups.try_into().unwrap(); + assert!(ngroups <= groups.len()); + groups.truncate(ngroups); Ok(groups) } } @@ -196,7 +197,7 @@ impl Passwd { pub fn belongs_to(&self) -> Vec { let mut ngroups: c_int = 8; let mut ngroups_old: c_int; - let mut groups = Vec::with_capacity(ngroups as usize); + let mut groups = vec![0; ngroups.try_into().unwrap()]; let name = CString::new(self.name.clone()).unwrap(); loop { ngroups_old = ngroups; @@ -206,15 +207,14 @@ impl Passwd { if ngroups == ngroups_old { ngroups *= 2; } - groups.resize(ngroups as usize, 0); + groups.resize(ngroups.try_into().unwrap(), 0); } else { break; } } - unsafe { - groups.set_len(ngroups as usize); - } - groups.truncate(ngroups as usize); + let ngroups = ngroups.try_into().unwrap(); + assert!(ngroups <= groups.len()); + groups.truncate(ngroups); groups } }