summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-07-07 17:21:49 +0200
committerDavid Lönnhager <david.l@mullvad.net>2021-07-08 17:40:59 +0200
commit88a05b7d062183a63c53b6b2471beddedb60b728 (patch)
treee07be7feb204a879d9a6a6e43470ea7f1d368a40
parenta77a58850d4e005df88acbac27782c0a382ce6b8 (diff)
downloadmullvadvpn-88a05b7d062183a63c53b6b2471beddedb60b728.tar.xz
mullvadvpn-88a05b7d062183a63c53b6b2471beddedb60b728.zip
Free path when SHGetKnownFolderPath fails
-rw-r--r--mullvad-setup/src/daemon_paths.rs21
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
}