Don't write spaces after semicolons in FMTP lines.
Reference: RFC 6184 section 8.2.1 and examples.
BUG=webrtc:5793
NOTRY=True
Review URL: https://codereview.webrtc.org/1888373002
Cr-Commit-Position: refs/heads/master@{#12383}
diff --git a/webrtc/api/objctests/RTCSessionDescriptionTest.mm b/webrtc/api/objctests/RTCSessionDescriptionTest.mm
index 605c5f1..37ac65c 100644
--- a/webrtc/api/objctests/RTCSessionDescriptionTest.mm
+++ b/webrtc/api/objctests/RTCSessionDescriptionTest.mm
@@ -81,7 +81,7 @@
"a=sendrecv\r\n"
"a=rtcp-mux\r\n"
"a=rtpmap:111 opus/48000/2\r\n"
- "a=fmtp:111 minptime=10; useinbandfec=1\r\n"
+ "a=fmtp:111 minptime=10;useinbandfec=1\r\n"
"a=rtpmap:103 ISAC/16000\r\n"
"a=rtpmap:9 G722/8000\r\n"
"a=rtpmap:0 PCMU/8000\r\n"
diff --git a/webrtc/api/webrtcsdp.cc b/webrtc/api/webrtcsdp.cc
index 8497f4c..10f9922 100644
--- a/webrtc/api/webrtcsdp.cc
+++ b/webrtc/api/webrtcsdp.cc
@@ -1564,11 +1564,13 @@
std::ostringstream* os) {
for (cricket::CodecParameterMap::const_iterator fmtp = parameters.begin();
fmtp != parameters.end(); ++fmtp) {
- // Each new parameter, except the first one starts with ";" and " ".
- if (fmtp != parameters.begin()) {
+ // Parameters are a semicolon-separated list, no spaces.
+ // The list is separated from the header by a space.
+ if (fmtp == parameters.begin()) {
+ *os << kSdpDelimiterSpace;
+ } else {
*os << kSdpDelimiterSemicolon;
}
- *os << kSdpDelimiterSpace;
WriteFmtpParameter(fmtp->first, fmtp->second, os);
}
}
diff --git a/webrtc/api/webrtcsdp_unittest.cc b/webrtc/api/webrtcsdp_unittest.cc
index 2b63c79..f222b3f 100644
--- a/webrtc/api/webrtcsdp_unittest.cc
+++ b/webrtc/api/webrtcsdp_unittest.cc
@@ -2114,6 +2114,9 @@
EXPECT_NE(std::string::npos, fmtp_value.find("level-asymmetry-allowed=1"));
EXPECT_NE(std::string::npos, fmtp_value.find("packetization-mode=1"));
EXPECT_NE(std::string::npos, fmtp_value.find("profile-level-id=42e01f"));
+ // Check that there are no spaces after semicolons.
+ // https://bugs.webrtc.org/5793
+ EXPECT_EQ(std::string::npos, fmtp_value.find("; "));
}
TEST_F(WebRtcSdpTest, DeserializeSessionDescription) {