Skip to content

Commit f9aec7a

Browse files
committed
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.
1 parent b181d78 commit f9aec7a

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/mimefactory.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,27 +1580,15 @@ impl MimeFactory {
15801580
);
15811581
}
15821582

1583-
if msg.param.exists(Param::WebrtcRoom) {
1583+
if let Some(offer) = msg.param.get(Param::WebrtcRoom) {
15841584
headers.push((
15851585
"Chat-Webrtc-Room",
1586-
mail_builder::headers::raw::Raw::new(
1587-
msg.param
1588-
.get(Param::WebrtcRoom)
1589-
.unwrap_or_default()
1590-
.to_string(),
1591-
)
1592-
.into(),
1586+
mail_builder::headers::raw::Raw::new(b_encode(offer)).into(),
15931587
));
1594-
} else if msg.param.exists(Param::WebrtcAccepted) {
1588+
} else if let Some(answer) = msg.param.get(Param::WebrtcAccepted) {
15951589
headers.push((
15961590
"Chat-Webrtc-Accepted",
1597-
mail_builder::headers::raw::Raw::new(
1598-
msg.param
1599-
.get(Param::WebrtcAccepted)
1600-
.unwrap_or_default()
1601-
.to_string(),
1602-
)
1603-
.into(),
1591+
mail_builder::headers::raw::Raw::new(b_encode(answer)).into(),
16041592
));
16051593
}
16061594

@@ -1894,5 +1882,17 @@ fn render_rfc724_mid(rfc724_mid: &str) -> String {
18941882
}
18951883
}
18961884

1885+
/// Encodes UTF-8 string as a single B-encoded-word.
1886+
///
1887+
/// We manually encode some headers because as of
1888+
/// version 0.4.4 mail-builder crate does not encode
1889+
/// newlines correctly if they appear in a text header.
1890+
fn b_encode(value: &str) -> String {
1891+
format!(
1892+
"=?utf-8?B?{}?=",
1893+
base64::engine::general_purpose::STANDARD.encode(value)
1894+
)
1895+
}
1896+
18971897
#[cfg(test)]
18981898
mod mimefactory_tests;

0 commit comments

Comments
 (0)