From f9aec7af0d7e20e27154e077f561fae65c4a221b Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 10 Sep 2025 22:58:01 +0000 Subject: [PATCH] fix: B-encode SDP offer and answer sent in headers SDP offer and answer contain newlines. Without the fix these newlines are not encoded at all and break the header into multiple headers or even prevent parsing of the following headers. --- src/mimefactory.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/mimefactory.rs b/src/mimefactory.rs index 5ccbbe9c7..4cee76a49 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -1580,27 +1580,15 @@ impl MimeFactory { ); } - if msg.param.exists(Param::WebrtcRoom) { + if let Some(offer) = msg.param.get(Param::WebrtcRoom) { headers.push(( "Chat-Webrtc-Room", - mail_builder::headers::raw::Raw::new( - msg.param - .get(Param::WebrtcRoom) - .unwrap_or_default() - .to_string(), - ) - .into(), + mail_builder::headers::raw::Raw::new(b_encode(offer)).into(), )); - } else if msg.param.exists(Param::WebrtcAccepted) { + } else if let Some(answer) = msg.param.get(Param::WebrtcAccepted) { headers.push(( "Chat-Webrtc-Accepted", - mail_builder::headers::raw::Raw::new( - msg.param - .get(Param::WebrtcAccepted) - .unwrap_or_default() - .to_string(), - ) - .into(), + mail_builder::headers::raw::Raw::new(b_encode(answer)).into(), )); } @@ -1894,5 +1882,17 @@ fn render_rfc724_mid(rfc724_mid: &str) -> String { } } +/// Encodes UTF-8 string as a single B-encoded-word. +/// +/// We manually encode some headers because as of +/// version 0.4.4 mail-builder crate does not encode +/// newlines correctly if they appear in a text header. +fn b_encode(value: &str) -> String { + format!( + "=?utf-8?B?{}?=", + base64::engine::general_purpose::STANDARD.encode(value) + ) +} + #[cfg(test)] mod mimefactory_tests;