From 42f17130b48f52a08bfaf24b40050fbd7b882fef Mon Sep 17 00:00:00 2001 From: Jackson Coxson Date: Tue, 25 Mar 2025 00:09:51 -0600 Subject: [PATCH] False drop libplist from Rust --- ffi/src/installation_proxy.rs | 2 +- ffi/src/pairing_file.rs | 1 + ffi/src/util.rs | 7 +++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ffi/src/installation_proxy.rs b/ffi/src/installation_proxy.rs index 9ea104c..bf08e07 100644 --- a/ffi/src/installation_proxy.rs +++ b/ffi/src/installation_proxy.rs @@ -197,7 +197,7 @@ pub unsafe extern "C" fn installation_proxy_get_apps( let res: Result, IdeviceError> = RUNTIME.block_on(async { client.0.get_apps(app_type, bundle_ids).await.map(|apps| { apps.into_values() - .map(|v| util::plist_to_libplist(&v).get_pointer()) + .map(|v| util::plist_to_libplist(&v)) .collect() }) }); diff --git a/ffi/src/pairing_file.rs b/ffi/src/pairing_file.rs index 67bd870..c42ecef 100644 --- a/ffi/src/pairing_file.rs +++ b/ffi/src/pairing_file.rs @@ -136,6 +136,7 @@ pub unsafe extern "C" fn idevice_pairing_file_serialize( #[unsafe(no_mangle)] pub unsafe extern "C" fn idevice_pairing_file_free(pairing_file: *mut IdevicePairingFile) { if !pairing_file.is_null() { + log::debug!("Freeing pairing file"); let _ = unsafe { Box::from_raw(pairing_file) }; } } diff --git a/ffi/src/util.rs b/ffi/src/util.rs index 19eacea..1dad008 100644 --- a/ffi/src/util.rs +++ b/ffi/src/util.rs @@ -77,10 +77,13 @@ pub(crate) fn c_addr_to_rust(addr: *const libc::sockaddr) -> Result plist_plus::Plist { +pub(crate) fn plist_to_libplist(v: &Value) -> *mut libc::c_void { let buf = Vec::new(); let mut writer = std::io::BufWriter::new(buf); plist::to_writer_xml(&mut writer, v).unwrap(); let buf = String::from_utf8(writer.into_inner().unwrap()).unwrap(); - plist_plus::Plist::from_xml(buf).unwrap() + let p = plist_plus::Plist::from_xml(buf).unwrap(); + let ptr = p.get_pointer(); + p.false_drop(); + ptr }