From 159f2e41abfe2c3f000563085bb850c2b9e6f327 Mon Sep 17 00:00:00 2001 From: iequidoo Date: Mon, 13 Apr 2026 09:00:00 -0300 Subject: [PATCH] fix: Set Param::GuaranteeE2ee before preparing message blob (#8090) Otherwise `Param::GuaranteeE2ee` is set only after rendering the message and some UIs, e.g. DC Android, display the message as unencrypted while preparing the blob and rendering and encrypting the message. NB: DC Desktop doesn't display the message until `send_msg()` returns. --- src/chat.rs | 16 ++++++++++++++-- src/message.rs | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/chat.rs b/src/chat.rs index 2f0130e86..dc070697b 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -2628,7 +2628,7 @@ pub async fn send_msg(context: &Context, chat_id: ChatId, msg: &mut Message) -> if msg.state != MessageState::Undefined && msg.state != MessageState::OutPreparing { msg.param.remove(Param::GuaranteeE2ee); msg.param.remove(Param::ForcePlaintext); - msg.update_param(context).await?; + // create_send_msg_jobs() will update `param` in the db. } // protect all system messages against RTLO attacks @@ -2733,7 +2733,19 @@ async fn prepare_send_msg( None }; - // ... then change the MessageState in the message object + if matches!( + msg.state, + MessageState::Undefined | MessageState::OutPreparing + ) + // v2 SecureJoin "v*-request" messages are unencrypted. + && msg.param.get_cmd() != SystemMessage::SecurejoinMessage + && chat.is_encrypted(context).await? + { + msg.param.set_int(Param::GuaranteeE2ee, 1); + if !msg.id.is_unset() { + msg.update_param(context).await?; + } + } msg.state = MessageState::OutPending; msg.timestamp_sort = create_smeared_timestamp(context); diff --git a/src/message.rs b/src/message.rs index 0ae7591cc..0394da7f9 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1393,6 +1393,8 @@ pub enum MessageState { /// For files which need time to be prepared before they can be /// sent, the message enters this state before /// OutPending. + /// + /// Deprecated 2024-12-07. OutPreparing = 18, /// Message saved as draft.