From 0a336af724d09b91719e3ac2c98e6806b3f25228 Mon Sep 17 00:00:00 2001
From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
Date: Thu, 18 Dec 2014 15:20:43 -0500
Subject: [PATCH] daemon: fix possible null access during sdp modifications

Refs #62705

Change-Id: I86844674ad6390c4b5c805c7458a563dc0b8d91b
---
 daemon/src/sip/sdp.cpp | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/daemon/src/sip/sdp.cpp b/daemon/src/sip/sdp.cpp
index b25b3af157..1120087c55 100644
--- a/daemon/src/sip/sdp.cpp
+++ b/daemon/src/sip/sdp.cpp
@@ -856,7 +856,11 @@ void Sdp::addZrtpAttribute(pjmedia_sdp_media* media, std::string hash)
 void
 Sdp::addIceCandidates(unsigned media_index, const std::vector<std::string>& cands)
 {
-    assert(media_index < localSession_->media_count);
+    if (media_index >= localSession_->media_count) {
+        SFL_ERR("addIceCandidates failed: cannot access media#%u (may be deactivated)", media_index);
+        return;
+    }
+
     auto media = localSession_->media[media_index];
 
     for (const auto &item : cands) {
@@ -872,8 +876,14 @@ std::vector<std::string>
 Sdp::getIceCandidates(unsigned media_index) const
 {
     auto session = remoteSession_ ? remoteSession_ : activeRemoteSession_;
-    assert(session);
-    assert(media_index < session->media_count);
+    if (not session) {
+        SFL_ERR("getIceCandidates failed: no remote session");
+        return {};
+    }
+    if (media_index >= session->media_count) {
+        SFL_ERR("getIceCandidates failed: cannot access media#%u (may be deactivated)", media_index);
+        return {};
+    }
     auto media = session->media[media_index];
     std::vector<std::string> candidates;
 
-- 
GitLab