From 4e393070be2288596170e4ac21783785ab511466 Mon Sep 17 00:00:00 2001 From: "wu@webrtc.org" Date: Mon, 7 Apr 2014 17:04:35 +0000 Subject: [PATCH] Compare the answer's media type against offer to make sure they are match. Otherwise we should return failure. BUG=2687 R=mallinath@webrtc.org Review URL: https://webrtc-codereview.appspot.com/11079005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5858 4adac7df-926f-26a2-2b94-8c16560cd09d --- talk/app/webrtc/webrtcsession.cc | 9 +++++++++ talk/app/webrtc/webrtcsession_unittest.cc | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc index 2d040291a6..62276f08c3 100644 --- a/talk/app/webrtc/webrtcsession.cc +++ b/talk/app/webrtc/webrtcsession.cc @@ -86,6 +86,15 @@ static bool VerifyMediaDescriptions( if ((offer->contents()[i].name) != answer->contents()[i].name) { return false; } + const MediaContentDescription* offer_mdesc = + static_cast( + offer->contents()[i].description); + const MediaContentDescription* answer_mdesc = + static_cast( + answer->contents()[i].description); + if (offer_mdesc->type() != answer_mdesc->type()) { + return false; + } } return true; } diff --git a/talk/app/webrtc/webrtcsession_unittest.cc b/talk/app/webrtc/webrtcsession_unittest.cc index 79ea2a508e..2b380470a1 100644 --- a/talk/app/webrtc/webrtcsession_unittest.cc +++ b/talk/app/webrtc/webrtcsession_unittest.cc @@ -2611,22 +2611,31 @@ TEST_F(WebRtcSessionTest, TestIncorrectMLinesInRemoteAnswer) { answer->session_version())); SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer); - // Modifying content names. + // Different content names. std::string sdp; EXPECT_TRUE(answer->ToString(&sdp)); const std::string kAudioMid = "a=mid:audio"; const std::string kAudioMidReplaceStr = "a=mid:audio_content_name"; - - // Replacing |audio| with |audio_content_name|. talk_base::replace_substrs(kAudioMid.c_str(), kAudioMid.length(), kAudioMidReplaceStr.c_str(), kAudioMidReplaceStr.length(), &sdp); - SessionDescriptionInterface* modified_answer1 = CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, NULL); SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer1); + // Different media types. + EXPECT_TRUE(answer->ToString(&sdp)); + const std::string kAudioMline = "m=audio"; + const std::string kAudioMlineReplaceStr = "m=video"; + talk_base::replace_substrs(kAudioMline.c_str(), kAudioMline.length(), + kAudioMlineReplaceStr.c_str(), + kAudioMlineReplaceStr.length(), + &sdp); + SessionDescriptionInterface* modified_answer2 = + CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, NULL); + SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer2); + SetRemoteDescriptionWithoutError(answer.release()); }