rtpbin: Fix division by zero when using ts-offset-smoothing-factor
authorRobert Rosengren <robertr@axis.com>
Mon, 11 Apr 2022 11:40:56 +0000 (13:40 +0200)
committerRobert Rosengren <robertr@axis.com>
Mon, 11 Apr 2022 13:29:49 +0000 (15:29 +0200)
avg_ts_offset may cause division by zero when calculating potential
overflow protection. This fix will avoid the division.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2151>

subprojects/gst-plugins-good/gst/rtpmanager/gstrtpbin.c

index d578c03..5181636 100644 (file)
@@ -1362,10 +1362,12 @@ stream_set_ts_offset (GstRtpBin * bin, GstRtpBinStream * stream,
        *   ((bin->ts_offset_smoothing_factor - 1) * stream->avg_ts_offset
        *    + ts_offset) / bin->ts_offset_smoothing_factor
        */
-      guint64 max_possible_smoothing_factor =
-          G_MAXINT64 / ABS (stream->avg_ts_offset);
+      guint64 max_possible_smoothing_factor = G_MAXUINT64;
       gint64 cur_avg_product =
           (bin->ts_offset_smoothing_factor - 1) * stream->avg_ts_offset;
+      if (stream->avg_ts_offset != 0)
+        max_possible_smoothing_factor =
+            G_MAXINT64 / ABS (stream->avg_ts_offset);
 
       if ((max_possible_smoothing_factor < bin->ts_offset_smoothing_factor) ||
           (cur_avg_product > 0 && G_MAXINT64 - cur_avg_product < ts_offset) ||