From 6da2639dfa293d614bbfb35175344426f3358406 Mon Sep 17 00:00:00 2001 From: jD91mZM2 <me@krake.one> Date: Sat, 28 Jul 2018 08:22:21 +0200 Subject: [PATCH] Fix leaking uninitialized elements and missing free --- src/pwd/src/lib.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/pwd/src/lib.rs b/src/pwd/src/lib.rs index e2eb510c..58acf358 100644 --- a/src/pwd/src/lib.rs +++ b/src/pwd/src/lib.rs @@ -83,16 +83,17 @@ fn pwd_lookup<F>(out: *mut passwd, alloc: Option<(*mut c_char, size_t)>, mut cal } let read = platform::read(*file, &mut buf[len..]); + + unsafe { + buf.set_len(len + read as usize); + } + if read == 0 { return OptionPasswd::NotFound; } if read < 0 { return OptionPasswd::Error; } - - unsafe { - buf.set_len(len + read as usize); - } } // Parse into passwd @@ -262,6 +263,9 @@ pub extern "C" fn getpwuid(uid: uid_t) -> *mut passwd { OptionPasswd::Error => ptr::null_mut(), OptionPasswd::NotFound => ptr::null_mut(), OptionPasswd::Found(buf) => unsafe { + if PASSWD_BUF != ptr::null_mut() { + platform::free(PASSWD_BUF as *mut c_void); + } PASSWD_BUF = buf; &mut PASSWD } -- GitLab