diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-07-07 17:21:49 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-07-08 17:40:59 +0200 |
| commit | 88a05b7d062183a63c53b6b2471beddedb60b728 (patch) | |
| tree | e07be7feb204a879d9a6a6e43470ea7f1d368a40 | |
| parent | a77a58850d4e005df88acbac27782c0a382ce6b8 (diff) | |
| download | mullvadvpn-88a05b7d062183a63c53b6b2471beddedb60b728.tar.xz mullvadvpn-88a05b7d062183a63c53b6b2471beddedb60b728.zip | |
Free path when SHGetKnownFolderPath fails
| -rw-r--r-- | mullvad-setup/src/daemon_paths.rs | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/mullvad-setup/src/daemon_paths.rs b/mullvad-setup/src/daemon_paths.rs index fce81ede8c..5b1b32edf3 100644 --- a/mullvad-setup/src/daemon_paths.rs +++ b/mullvad-setup/src/daemon_paths.rs @@ -179,19 +179,18 @@ fn get_known_folder_path( user_token: HANDLE, ) -> std::io::Result<PathBuf> { let mut folder_path: PWSTR = ptr::null_mut(); - let path = unsafe { - let status = SHGetKnownFolderPath(&folder_id, flags, user_token, &mut folder_path); - if status != S_OK || folder_path.is_null() { - return Err(io::Error::new( - io::ErrorKind::NotFound, - format!("Can't find known folder {:?}", &folder_id), - )); - } - WideCStr::from_ptr_str(folder_path) + let status = unsafe { SHGetKnownFolderPath(&folder_id, flags, user_token, &mut folder_path) }; + let result = if status == S_OK { + let path = unsafe { WideCStr::from_ptr_str(folder_path) }; + Ok(path.to_ustring().to_os_string().into()) + } else { + Err(io::Error::new( + io::ErrorKind::NotFound, + format!("Can't find known folder {:?}", &folder_id), + )) }; - let result = Ok(path.to_ustring().to_os_string().into()); - unsafe { CoTaskMemFree(path.as_ptr() as *const _ as *mut _) }; + unsafe { CoTaskMemFree(folder_path as *mut _) }; result } |
