From 4302c6bd7bd4cf26cb03ef409122fc04e5af1562 Mon Sep 17 00:00:00 2001 From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> Date: Tue, 3 Nov 2015 10:50:05 -0500 Subject: [PATCH] sips: fix memory leak This patch fixes a memory leak in SipsIceTransport class. gnutls_priority_init() allocates memory, no gnutls_priority_deinit() is called to free it. This last has been added in SipsIceTransport destructor. This patch also fixes code rules error on priority_cache_ naming (this is the variable initialized by gnutls_priority_init). Change-Id: I32a8a7347d4af96886a0def2d9a6d77fe0fad7c7 Tuleap: #92 --- src/ringdht/sips_transport_ice.cpp | 6 ++++-- src/ringdht/sips_transport_ice.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ringdht/sips_transport_ice.cpp b/src/ringdht/sips_transport_ice.cpp index 9b1d340d49..b62d3f88aa 100644 --- a/src/ringdht/sips_transport_ice.cpp +++ b/src/ringdht/sips_transport_ice.cpp @@ -177,7 +177,7 @@ SipsIceTransport::SipsIceTransport(pjsip_endpoint* endpt, if (pjsip_transport_register(base.tpmgr, &base) != PJ_SUCCESS) throw std::runtime_error("Can't register PJSIP transport."); - gnutls_priority_init(&priority_cache, + gnutls_priority_init(&priority_cache_, "SECURE192:-VERS-TLS-ALL:+VERS-DTLS-ALL:%SERVER_PRECEDENCE", nullptr); @@ -219,6 +219,8 @@ SipsIceTransport::~SipsIceTransport() pj_lock_destroy(trData_.base.lock); pj_atomic_destroy(trData_.base.ref_cnt); + + gnutls_priority_deinit(priority_cache_); } pj_status_t @@ -237,7 +239,7 @@ SipsIceTransport::startTlsSession() gnutls_session_set_ptr(session_, this); gnutls_transport_set_ptr(session_, this); - gnutls_priority_set(session_, priority_cache); + gnutls_priority_set(session_, priority_cache_); /* Allocate credentials for handshaking and transmission */ gnutls_certificate_credentials_t certCred; diff --git a/src/ringdht/sips_transport_ice.h b/src/ringdht/sips_transport_ice.h index aa4284afed..365d897351 100644 --- a/src/ringdht/sips_transport_ice.h +++ b/src/ringdht/sips_transport_ice.h @@ -129,7 +129,7 @@ private: gnutls_session_t session_ {nullptr}; std::unique_ptr<gnutls_certificate_credentials_st, decltype(gnutls_certificate_free_credentials)&> xcred_; - gnutls_priority_t priority_cache; + gnutls_priority_t priority_cache_ {nullptr}; gnutls_datum_t cookie_key_ {nullptr, 0}; gnutls_dtls_prestate_st prestate_; -- GitLab