From fcc0a8d81b79916d37857b2071464d3d3f9843d8 Mon Sep 17 00:00:00 2001 From: Lucas Nogueira Date: Sat, 31 Aug 2024 00:00:15 -0300 Subject: [PATCH] fix(core): isolation pattern breaks raw postMessage payload only affects Android, but breaks processing of any raw payload --- .changes/fix-isolation-parse-raw-body.md | 5 +++++ crates/tauri/src/ipc/protocol.rs | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changes/fix-isolation-parse-raw-body.md diff --git a/.changes/fix-isolation-parse-raw-body.md b/.changes/fix-isolation-parse-raw-body.md new file mode 100644 index 000000000000..3dfece32d728 --- /dev/null +++ b/.changes/fix-isolation-parse-raw-body.md @@ -0,0 +1,5 @@ +--- +"tauri": patch:bug +--- + +Fixes IPC postMessage raw body processing when using the isolation pattern. diff --git a/crates/tauri/src/ipc/protocol.rs b/crates/tauri/src/ipc/protocol.rs index ef25f6542551..6fdffdcb6713 100644 --- a/crates/tauri/src/ipc/protocol.rs +++ b/crates/tauri/src/ipc/protocol.rs @@ -17,6 +17,7 @@ use http::{ }, HeaderValue, Method, Request, StatusCode, }; +use mime::APPLICATION_OCTET_STREAM; use url::Url; use super::{CallbackFn, InvokeResponse}; @@ -278,11 +279,17 @@ fn handle_ipc_message(request: Request, manager: &AppManager serde_json::from_str::>(request.body()) .map_err(Into::into) .and_then(|message| { + let is_raw = message.payload.content_type() == &APPLICATION_OCTET_STREAM.to_string(); + let payload = crypto_keys.decrypt(message.payload)?; Ok(Message { cmd: message.cmd, callback: message.callback, error: message.error, - payload: serde_json::from_slice(&crypto_keys.decrypt(message.payload)?)?, + payload: if is_raw { + payload.into() + } else { + serde_json::from_slice(&payload)? + }, options: message.options, invoke_key: message.invoke_key, })