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.
This commit is contained in:
link2xt
2025-09-10 22:58:01 +00:00
committed by l
parent b181d78dd5
commit f9aec7af0d

View File

@@ -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;