mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-11-28 20:48:52 +03:00
fix(core): prevent iOS crash on invalid plugin response JSON (#8049)
This commit is contained in:
parent
d16206a086
commit
22f26882cf
5
.changes/prevent-ios-crash.md
Normal file
5
.changes/prevent-ios-crash.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"tauri": patch:bug
|
||||||
|
---
|
||||||
|
|
||||||
|
Prevent crash on iOS when the Swift plugin data is not a valid JSON string.
|
@ -344,13 +344,20 @@ pub(crate) fn run_command<R: Runtime, C: AsRef<str>, F: FnOnce(PluginResponse) +
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.remove(&id)
|
.remove(&id)
|
||||||
{
|
{
|
||||||
let payload = serde_json::from_str(payload.to_str().unwrap()).unwrap();
|
let json = payload.to_str().unwrap();
|
||||||
|
match serde_json::from_str(json) {
|
||||||
|
Ok(payload) => {
|
||||||
handler(if success == 1 {
|
handler(if success == 1 {
|
||||||
Ok(payload)
|
Ok(payload)
|
||||||
} else {
|
} else {
|
||||||
Err(payload)
|
Err(payload)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Err(err) => {
|
||||||
|
handler(Err(format!("{err}, data: {}", json).into()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" fn send_channel_data_handler(id: c_ulonglong, payload: *const c_char) {
|
extern "C" fn send_channel_data_handler(id: c_ulonglong, payload: *const c_char) {
|
||||||
|
@ -69,7 +69,7 @@ pub fn get<R: Runtime>(
|
|||||||
|
|
||||||
fn get_response<R: Runtime>(
|
fn get_response<R: Runtime>(
|
||||||
request: Request<Vec<u8>>,
|
request: Request<Vec<u8>>,
|
||||||
manager: &WindowManager<R>,
|
#[allow(unused_variables)] manager: &WindowManager<R>,
|
||||||
window_origin: &str,
|
window_origin: &str,
|
||||||
web_resource_request_handler: Option<&WebResourceRequestHandler>,
|
web_resource_request_handler: Option<&WebResourceRequestHandler>,
|
||||||
#[cfg(all(dev, mobile))] (url, response_cache): (
|
#[cfg(all(dev, mobile))] (url, response_cache): (
|
||||||
|
@ -32,10 +32,7 @@ use crate::{
|
|||||||
},
|
},
|
||||||
sealed::ManagerBase,
|
sealed::ManagerBase,
|
||||||
sealed::RuntimeOrDispatch,
|
sealed::RuntimeOrDispatch,
|
||||||
utils::{
|
utils::config::{WindowConfig, WindowEffectsConfig, WindowUrl},
|
||||||
config::{WindowConfig, WindowEffectsConfig, WindowUrl},
|
|
||||||
ProgressBarState,
|
|
||||||
},
|
|
||||||
EventLoopMessage, Manager, Runtime, Theme, WindowEvent,
|
EventLoopMessage, Manager, Runtime, Theme, WindowEvent,
|
||||||
};
|
};
|
||||||
#[cfg(desktop)]
|
#[cfg(desktop)]
|
||||||
@ -2071,7 +2068,10 @@ impl<R: Runtime> Window<R> {
|
|||||||
/// - **Linux / macOS**: Progress bar is app-wide and not specific to this window.
|
/// - **Linux / macOS**: Progress bar is app-wide and not specific to this window.
|
||||||
/// - **Linux**: Only supported desktop environments with `libunity` (e.g. GNOME).
|
/// - **Linux**: Only supported desktop environments with `libunity` (e.g. GNOME).
|
||||||
/// - **iOS / Android:** Unsupported.
|
/// - **iOS / Android:** Unsupported.
|
||||||
pub fn set_progress_bar(&self, progress_state: ProgressBarState) -> crate::Result<()> {
|
pub fn set_progress_bar(
|
||||||
|
&self,
|
||||||
|
progress_state: crate::utils::ProgressBarState,
|
||||||
|
) -> crate::Result<()> {
|
||||||
self
|
self
|
||||||
.window
|
.window
|
||||||
.dispatcher
|
.dispatcher
|
||||||
|
@ -314,13 +314,12 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
|
|||||||
#[cfg(any(debug_assertions, feature = "devtools"))]
|
#[cfg(any(debug_assertions, feature = "devtools"))]
|
||||||
desktop_commands::internal_toggle_devtools,
|
desktop_commands::internal_toggle_devtools,
|
||||||
]);
|
]);
|
||||||
#[allow(clippy::needless_return)]
|
handler(invoke)
|
||||||
return handler(invoke);
|
|
||||||
}
|
}
|
||||||
#[cfg(mobile)]
|
#[cfg(mobile)]
|
||||||
{
|
{
|
||||||
invoke.resolver.reject("Window API not available on mobile");
|
invoke.resolver.reject("Window API not available on mobile");
|
||||||
return true;
|
true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.build()
|
.build()
|
||||||
|
Loading…
Reference in New Issue
Block a user