summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2025-11-20 16:30:26 +0100
committerLinus Färnstrand <linus@mullvad.net>2025-11-21 11:14:31 +0100
commit6877095d3803ae71442a4aab7e0ce1beda8f27ec (patch)
treef70384beb29070317bfe6ac1658ef81f069b0cf7
parenta9a7e6c8294c152b8fecf8b76b14595aaf37bdc8 (diff)
downloadmullvadvpn-6877095d3803ae71442a4aab7e0ce1beda8f27ec.tar.xz
mullvadvpn-6877095d3803ae71442a4aab7e0ce1beda8f27ec.zip
Fix `as _` casts in iOS code
-rw-r--r--mullvad-ios/src/api_client/access_method_settings.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/mullvad-ios/src/api_client/access_method_settings.rs b/mullvad-ios/src/api_client/access_method_settings.rs
index 40f0acd714..b115c2e2d2 100644
--- a/mullvad-ios/src/api_client/access_method_settings.rs
+++ b/mullvad-ios/src/api_client/access_method_settings.rs
@@ -143,27 +143,31 @@ pub unsafe extern "C" fn init_access_method_settings_wrapper(
)
};
- let custom = unsafe { access_methods_from_raw_array(custom_methods_raw, custom_method_count) };
+ let custom =
+ unsafe { access_methods_from_raw_array(custom_methods_raw.cast(), custom_method_count) };
let settings = Settings::new(direct, mullvad_bridges, encrypted_dns_proxy, custom);
let context = SwiftAccessMethodSettingsContext { settings };
SwiftAccessMethodSettingsWrapper::new(context)
}
-/// Creates a vector of `AccessMethodSetting` objects from a C array
+/// Creates a vector of `AccessMethodSetting` objects from a C array.
///
-/// SAFETY: `raw_array` must be aligned, non-null and initialized for `count` reads
+/// This takes ownership of the `AccessMethodSetting`s pointed to by `raw_array`. So the memory is
+/// freed when the returned vector is dropped.
+///
+/// SAFETY: `raw_array` must be aligned, non-null, initialized for `count` reads and not be used
+/// after this call.
unsafe fn access_methods_from_raw_array(
- raw_array: *const c_void,
+ raw_array: *const *mut AccessMethodSetting,
number_of_elements: usize,
) -> Vec<AccessMethodSetting> {
- let raw_array: *mut *mut AccessMethodSetting = raw_array as _;
// SAFETY: See notice above
let slice = unsafe { slice::from_raw_parts(raw_array, number_of_elements) };
slice
.iter()
- .map(|&ptr| {
+ .map(|ptr: &*mut AccessMethodSetting| {
// SAFETY: `slice` is a slice of pointers to `AccessMethodSetting` created with `Box::into_raw`
- *unsafe { Box::from_raw(ptr) }
+ *unsafe { Box::from_raw(*ptr) }
})
.collect()
}