From 15ae79838caa6ee9494bece791b5221b9696c41a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 28 Feb 2018 19:19:10 +0200 Subject: [PATCH] matroskamux: Clip maximum cluster duration to the maximum possible value Only up to timescale * G_MAXINT16 is possible as cluster duration, which is already higher than our default value. Using higher values would cause overflows and broken files. Based on the investigation by Nicola Murino https://bugzilla.gnome.org/show_bug.cgi?id=792775 --- gst/matroska/matroska-mux.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c index 0a05ba2d60..78cffe88ce 100644 --- a/gst/matroska/matroska-mux.c +++ b/gst/matroska/matroska-mux.c @@ -3725,7 +3725,8 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad, mux->min_cluster_duration)); is_max_duration_exceeded = (mux->max_cluster_duration > 0 && buffer_timestamp > mux->cluster_time - && (buffer_timestamp - mux->cluster_time) >= mux->max_cluster_duration); + && (buffer_timestamp - mux->cluster_time) >= + MIN (G_MAXINT16 * mux->time_scale, mux->max_cluster_duration)); if (mux->cluster) { /* start a new cluster at every keyframe, at every GstForceKeyUnit event,