summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2013-04-09 21:31:24 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2013-04-09 21:37:24 -0400
commit4b89870a5865f59e6dc504dd51c996557ce02657 (patch)
treeba4d8f9d8b046de88232457b3de7a796dedbd5d6
parent329c250a415af53cb891af72b91fd4d7b8c6f0c5 (diff)
downloadgstreamer-plugins-bad-4b89870a5865f59e6dc504dd51c996557ce02657.tar.gz
srtpdec: Don't crash on invalid cipher
-rw-r--r--ext/srtp/gstsrtp.c6
-rw-r--r--ext/srtp/gstsrtpdec.c7
2 files changed, 12 insertions, 1 deletions
diff --git a/ext/srtp/gstsrtp.c b/ext/srtp/gstsrtp.c
index 30f765c94..c108de2cc 100644
--- a/ext/srtp/gstsrtp.c
+++ b/ext/srtp/gstsrtp.c
@@ -96,6 +96,8 @@ enum_nick_from_value (GType enum_gtype, gint value)
return NULL;
enum_value = g_enum_get_value (enum_class, value);
+ if (!enum_value)
+ return NULL;
nick = enum_value->value_nick;
g_type_class_unref (enum_class);
@@ -111,9 +113,11 @@ enum_value_from_nick (GType enum_gtype, const gchar * nick)
gint value;
if (!enum_gtype)
- return 0;
+ return -1;
enum_value = g_enum_get_value_by_nick (enum_class, nick);
+ if (!enum_value)
+ return -1;
value = enum_value->value;
g_type_class_unref (enum_class);
diff --git a/ext/srtp/gstsrtpdec.c b/ext/srtp/gstsrtpdec.c
index e38dc3ea3..e30d28a91 100644
--- a/ext/srtp/gstsrtpdec.c
+++ b/ext/srtp/gstsrtpdec.c
@@ -410,6 +410,13 @@ get_stream_from_caps (GstSrtpDec * filter, GstCaps * caps, guint32 ssrc)
rtcp_cipher);
stream->rtcp_auth = enum_value_from_nick (GST_TYPE_SRTP_AUTH_TYPE, rtcp_auth);
+ if (stream->rtp_cipher == -1 || stream->rtp_auth == -1 ||
+ stream->rtcp_cipher == -1 || stream->rtcp_auth == -1) {
+ GST_WARNING_OBJECT (filter, "Invalid caps for stream,"
+ " unknown cipher or auth type");
+ goto error;
+ }
+
if (stream->rtcp_cipher != NULL_CIPHER && stream->rtcp_auth == NULL_AUTH) {
GST_WARNING_OBJECT (filter,
"Cannot have SRTP NULL authentication with a not-NULL encryption"