False drop libplist from Rust

This commit is contained in:
Jackson Coxson
2025-03-25 00:09:51 -06:00
parent ac6ffde9ad
commit 42f17130b4
3 changed files with 7 additions and 3 deletions

View File

@@ -197,7 +197,7 @@ pub unsafe extern "C" fn installation_proxy_get_apps(
let res: Result<Vec<*mut c_void>, IdeviceError> = RUNTIME.block_on(async { let res: Result<Vec<*mut c_void>, IdeviceError> = RUNTIME.block_on(async {
client.0.get_apps(app_type, bundle_ids).await.map(|apps| { client.0.get_apps(app_type, bundle_ids).await.map(|apps| {
apps.into_values() apps.into_values()
.map(|v| util::plist_to_libplist(&v).get_pointer()) .map(|v| util::plist_to_libplist(&v))
.collect() .collect()
}) })
}); });

View File

@@ -136,6 +136,7 @@ pub unsafe extern "C" fn idevice_pairing_file_serialize(
#[unsafe(no_mangle)] #[unsafe(no_mangle)]
pub unsafe extern "C" fn idevice_pairing_file_free(pairing_file: *mut IdevicePairingFile) { pub unsafe extern "C" fn idevice_pairing_file_free(pairing_file: *mut IdevicePairingFile) {
if !pairing_file.is_null() { if !pairing_file.is_null() {
log::debug!("Freeing pairing file");
let _ = unsafe { Box::from_raw(pairing_file) }; let _ = unsafe { Box::from_raw(pairing_file) };
} }
} }

View File

@@ -77,10 +77,13 @@ pub(crate) fn c_addr_to_rust(addr: *const libc::sockaddr) -> Result<IpAddr, Idev
} }
} }
pub(crate) fn plist_to_libplist(v: &Value) -> plist_plus::Plist { pub(crate) fn plist_to_libplist(v: &Value) -> *mut libc::c_void {
let buf = Vec::new(); let buf = Vec::new();
let mut writer = std::io::BufWriter::new(buf); let mut writer = std::io::BufWriter::new(buf);
plist::to_writer_xml(&mut writer, v).unwrap(); plist::to_writer_xml(&mut writer, v).unwrap();
let buf = String::from_utf8(writer.into_inner().unwrap()).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
} }