Browse Source

fix(core): isolation pattern breaks raw postMessage payload (#10841)

Lucas Fernandes Nogueira 11 months ago
parent
commit
79de4332b6
2 changed files with 13 additions and 1 deletions
  1. 5 0
      .changes/fix-isolation-parse-raw-body.md
  2. 8 1
      crates/tauri/src/ipc/protocol.rs

+ 5 - 0
.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.

+ 8 - 1
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<R: Runtime>(request: Request<String>, manager: &AppManager
           serde_json::from_str::<IsolationMessage<'_>>(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,
               })