playbin: Fix wrong AV element pair selection when rank is very large value

If user set very high rank to an element (e.g., integer max),
integer overflow can happen while multiplication operation

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/690>
This commit is contained in:
Seungha Yang 2020-06-06 20:22:28 +09:00
parent cc516695b0
commit 9c3cff287e
2 changed files with 8 additions and 8 deletions

View file

@ -4023,10 +4023,10 @@ avelement_compare (gconstpointer p1, gconstpointer p2)
if (v1->sink && v2->sink) {
fs1 = (GstPluginFeature *) v1->sink;
fs2 = (GstPluginFeature *) v2->sink;
v1_rank =
gst_plugin_feature_get_rank (fd1) * gst_plugin_feature_get_rank (fs1);
v2_rank =
gst_plugin_feature_get_rank (fd2) * gst_plugin_feature_get_rank (fs2);
v1_rank = (gint64) gst_plugin_feature_get_rank (fd1) *
gst_plugin_feature_get_rank (fs1);
v2_rank = (gint64) gst_plugin_feature_get_rank (fd2) *
gst_plugin_feature_get_rank (fs2);
} else {
v1_rank = gst_plugin_feature_get_rank (fd1);
v2_rank = gst_plugin_feature_get_rank (fd2);

View file

@ -3348,10 +3348,10 @@ avelement_compare (gconstpointer p1, gconstpointer p2)
if (v1->sink && v2->sink) {
fs1 = (GstPluginFeature *) v1->sink;
fs2 = (GstPluginFeature *) v2->sink;
v1_rank =
gst_plugin_feature_get_rank (fd1) * gst_plugin_feature_get_rank (fs1);
v2_rank =
gst_plugin_feature_get_rank (fd2) * gst_plugin_feature_get_rank (fs2);
v1_rank = (gint64) gst_plugin_feature_get_rank (fd1) *
gst_plugin_feature_get_rank (fs1);
v2_rank = (gint64) gst_plugin_feature_get_rank (fd2) *
gst_plugin_feature_get_rank (fs2);
} else {
v1_rank = gst_plugin_feature_get_rank (fd1);
v2_rank = gst_plugin_feature_get_rank (fd2);