diff options
author | Olivier CrĂȘte <olivier.crete@collabora.com> | 2013-04-09 21:31:24 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2013-04-09 21:37:24 -0400 |
commit | 4b89870a5865f59e6dc504dd51c996557ce02657 (patch) | |
tree | ba4d8f9d8b046de88232457b3de7a796dedbd5d6 /ext/srtp | |
parent | 329c250a415af53cb891af72b91fd4d7b8c6f0c5 (diff) |
srtpdec: Don't crash on invalid cipher
Diffstat (limited to 'ext/srtp')
-rw-r--r-- | ext/srtp/gstsrtp.c | 6 | ||||
-rw-r--r-- | ext/srtp/gstsrtpdec.c | 7 |
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" |