summaryrefslogtreecommitdiff
path: root/ext/dtls
diff options
context:
space:
mode:
authorJose Antonio Santos Cadenas <santoscadenas@gmail.com>2015-05-14 16:06:55 +0200
committerSebastian Dröge <sebastian@centricular.com>2015-05-15 15:47:39 +0300
commitd625770a18f68b1a1eee2a71810cb2fe692ecee9 (patch)
tree08920b81aba81d0a72bb2f3adec8c91e8dab299d /ext/dtls
parentc6abd1632f430d0c3873be0ef5a82e4739d1e003 (diff)
downloadgstreamer-plugins-bad-d625770a18f68b1a1eee2a71810cb2fe692ecee9.tar.gz
dtls: Fix memory leak
Keys were not correctly released when it was get as a property nor when a second key was received https://bugzilla.gnome.org/show_bug.cgi?id=749380
Diffstat (limited to 'ext/dtls')
-rw-r--r--ext/dtls/gstdtlsdec.c6
-rw-r--r--ext/dtls/gstdtlsenc.c6
-rw-r--r--ext/dtls/gstdtlssrtpdec.c2
-rw-r--r--ext/dtls/gstdtlssrtpenc.c2
4 files changed, 16 insertions, 0 deletions
diff --git a/ext/dtls/gstdtlsdec.c b/ext/dtls/gstdtlsdec.c
index 75c827527..95ea6922c 100644
--- a/ext/dtls/gstdtlsdec.c
+++ b/ext/dtls/gstdtlsdec.c
@@ -404,6 +404,12 @@ on_key_received (GstDtlsConnection * connection, gpointer key, guint cipher,
self->srtp_auth = auth;
key_dup = g_memdup (key, GST_DTLS_SRTP_MASTER_KEY_LENGTH);
+
+ if (self->decoder_key) {
+ gst_buffer_unref (self->decoder_key);
+ self->decoder_key = NULL;
+ }
+
self->decoder_key =
gst_buffer_new_wrapped (key_dup, GST_DTLS_SRTP_MASTER_KEY_LENGTH);
diff --git a/ext/dtls/gstdtlsenc.c b/ext/dtls/gstdtlsenc.c
index 96dfa54fc..b78ff4a85 100644
--- a/ext/dtls/gstdtlsenc.c
+++ b/ext/dtls/gstdtlsenc.c
@@ -509,6 +509,12 @@ on_key_received (GstDtlsConnection * connection, gpointer key, guint cipher,
self->srtp_auth = auth;
key_dup = g_memdup (key, GST_DTLS_SRTP_MASTER_KEY_LENGTH);
+
+ if (self->encoder_key) {
+ gst_buffer_unref (self->encoder_key);
+ self->encoder_key = NULL;
+ }
+
self->encoder_key =
gst_buffer_new_wrapped (key_dup, GST_DTLS_SRTP_MASTER_KEY_LENGTH);
diff --git a/ext/dtls/gstdtlssrtpdec.c b/ext/dtls/gstdtlssrtpdec.c
index d80328d67..a86a8d708 100644
--- a/ext/dtls/gstdtlssrtpdec.c
+++ b/ext/dtls/gstdtlssrtpdec.c
@@ -381,6 +381,8 @@ on_decoder_request_key (GstElement * srtp_decoder,
break;
}
+ gst_buffer_unref (key_buffer);
+
return key_caps;
} else {
GST_WARNING_OBJECT (bin, "no srtp key available yet");
diff --git a/ext/dtls/gstdtlssrtpenc.c b/ext/dtls/gstdtlssrtpenc.c
index d7055b85e..941afacf5 100644
--- a/ext/dtls/gstdtlssrtpenc.c
+++ b/ext/dtls/gstdtlssrtpenc.c
@@ -399,6 +399,8 @@ on_key_received (GObject * encoder, GstDtlsSrtpEnc * self)
"rtp-auth", auth,
"rtcp-auth", auth, "key", buffer, "random-key", FALSE, NULL);
+ gst_buffer_unref (buffer);
+
g_signal_emit (self, signals[SIGNAL_ON_KEY_SET], 0);
} else {
GST_DEBUG_OBJECT (self,