mirror of
https://github.com/chatmail/core.git
synced 2026-04-28 19:06:35 +03:00
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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user