From abfedcb0c351bbdbc64b397f4c3e7624f186a48e Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 15 Dec 2022 16:51:54 -0300 Subject: [PATCH] screen-cast/src: Fix unsigned integer overflow The fields of 'priv->video_format.max_framerate' are all of type uint32_t. Multiplying by G_USEC_PER_SEC can overflow, and equally, dividing a large numerical type by uint32_t can err too. Since the variable holding the result is int64_t, cast all uint32_t fields to int64_t before doing any maths on it. Spotted while trying to investigating an issue with framerates on HDMI screencasts. Part-of: --- src/backends/meta-screen-cast-stream-src.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c index dd24ad5da..0406d5af0 100644 --- a/src/backends/meta-screen-cast-stream-src.c +++ b/src/backends/meta-screen-cast-stream-src.c @@ -624,8 +624,8 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src, int64_t time_since_last_frame_us; min_interval_us = - ((G_USEC_PER_SEC * priv->video_format.max_framerate.denom) / - priv->video_format.max_framerate.num); + ((G_USEC_PER_SEC * ((int64_t) priv->video_format.max_framerate.denom)) / + ((int64_t) priv->video_format.max_framerate.num)); time_since_last_frame_us = now_us - priv->last_frame_timestamp_us; if (time_since_last_frame_us < min_interval_us)