diff --git a/ext/srtp/gstsrtp.c b/ext/srtp/gstsrtp.c index 30f765c94b..c108de2ccd 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 e38dc3ea35..e30d28a915 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"