From 5bfe2bac676592656c7c8645daf57b03803f7b4a Mon Sep 17 00:00:00 2001
From: Tristan Matthews <tristan.matthews@savoirfairelinux.com>
Date: Fri, 27 Apr 2012 13:44:47 -0400
Subject: [PATCH] * 100016: don't double free crypto contexts, and don't
 improperly copy CryptoSuiteDefinitions

---
 daemon/src/audio/audiortp/audio_rtp_factory.cpp  |  4 ----
 daemon/src/audio/audiortp/audio_srtp_session.cpp | 11 ++---------
 daemon/src/audio/audiortp/audio_srtp_session.h   |  4 ----
 3 files changed, 2 insertions(+), 17 deletions(-)

diff --git a/daemon/src/audio/audiortp/audio_rtp_factory.cpp b/daemon/src/audio/audiortp/audio_rtp_factory.cpp
index 0eb046abe9..4747834738 100644
--- a/daemon/src/audio/audiortp/audio_rtp_factory.cpp
+++ b/daemon/src/audio/audiortp/audio_rtp_factory.cpp
@@ -50,10 +50,6 @@ AudioRtpFactory::AudioRtpFactory(SIPCall *ca) : rtpSession_(NULL),
 
 AudioRtpFactory::~AudioRtpFactory()
 {
-    AudioSrtpSession* srtpSession = dynamic_cast<AudioSrtpSession*>(rtpSession_);
-    if (srtpSession)
-        srtpSession->deleteCryptoContexts();
-
     delete rtpSession_;
 }
 
diff --git a/daemon/src/audio/audiortp/audio_srtp_session.cpp b/daemon/src/audio/audiortp/audio_srtp_session.cpp
index 630d3ce94c..b6c3d94df8 100644
--- a/daemon/src/audio/audiortp/audio_srtp_session.cpp
+++ b/daemon/src/audio/audiortp/audio_srtp_session.cpp
@@ -262,7 +262,7 @@ void AudioSrtpSession::initializeRemoteCryptoContext()
 {
     DEBUG("AudioSrtp: Initialize remote crypto context");
 
-    CryptoSuiteDefinition crypto = sfl::CryptoSuites[remoteCryptoSuite_];
+    const CryptoSuiteDefinition &crypto = sfl::CryptoSuites[remoteCryptoSuite_];
 
     delete remoteCryptoCtx_;
     remoteCryptoCtx_ = new ost::CryptoContext(0x0,
@@ -285,7 +285,7 @@ void AudioSrtpSession::initializeLocalCryptoContext()
 {
     DEBUG("AudioSrtp: Initialize local crypto context");
 
-    CryptoSuiteDefinition crypto = sfl::CryptoSuites[localCryptoSuite_];
+    const CryptoSuiteDefinition &crypto = sfl::CryptoSuites[localCryptoSuite_];
 
     delete localCryptoCtx_;
     localCryptoCtx_ = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(),
@@ -318,11 +318,4 @@ void AudioSrtpSession::restoreCryptoContext(ost::CryptoContext *localContext,
     setOutQueueCryptoContext(localCryptoCtx_);
 }
 
-void AudioSrtpSession::deleteCryptoContexts()
-{
-    delete remoteCryptoCtx_;
-    remoteCryptoCtx_ = 0;
-    delete localCryptoCtx_;
-    localCryptoCtx_ = 0;
-}
 }
diff --git a/daemon/src/audio/audiortp/audio_srtp_session.h b/daemon/src/audio/audiortp/audio_srtp_session.h
index 733e0cfb22..a84cfccc84 100644
--- a/daemon/src/audio/audiortp/audio_srtp_session.h
+++ b/daemon/src/audio/audiortp/audio_srtp_session.h
@@ -101,10 +101,6 @@ class AudioSrtpSession : public AudioSymmetricRtpSession {
          */
         void restoreCryptoContext(ost::CryptoContext *, ost::CryptoContext *);
 
-        /**
-         * Force deletion of the current crypto contexts.
-         */
-        void deleteCryptoContexts();
     private:
         NON_COPYABLE(AudioSrtpSession);
 
-- 
GitLab