https://bugs.gentoo.org/974286 https://gstreamer.freedesktop.org/security/sa-2026-0021.html https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11247 From 83becc83eac477ecb97171f8278b0047dd7b6d5f Mon Sep 17 00:00:00 2001 From: Cameron O'Neal Date: Wed, 1 Apr 2026 13:42:51 +0300 Subject: [PATCH 1/2] wavparse: Fix integer overflow when checking available buffer size for reading cues See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5009 Part-of: --- a/gst/wavparse/gstwavparse.c +++ b/gst/wavparse/gstwavparse.c @@ -796,6 +796,7 @@ gst_wavparse_cue_chunk (GstWavParse * wav, const guint8 * data, guint32 size) guint32 i, ncues; GList *cues = NULL; GstWavParseCue *cue; + guint32 expected_size; if (wav->cues) { GST_WARNING_OBJECT (wav, "found another cue's"); @@ -808,14 +809,15 @@ gst_wavparse_cue_chunk (GstWavParse * wav, const guint8 * data, guint32 size) } ncues = GST_READ_UINT32_LE (data); + size -= 4; + data += 4; - if (size < 4 + ncues * 24) { + if (!g_uint_checked_mul (&expected_size, ncues, 24) || size < expected_size) { GST_WARNING_OBJECT (wav, "broken file %d %d", size, ncues); return FALSE; } /* parse data */ - data += 4; for (i = 0; i < ncues; i++) { cue = g_new0 (GstWavParseCue, 1); cue->id = GST_READ_UINT32_LE (data); -- GitLab From 44f04fb2871a173027adcfdbafb72d31fddfec7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 1 Apr 2026 13:44:52 +0300 Subject: [PATCH 2/2] wavparse: Use prepend+reverse instead of append when building the cues list append has quadratic behaviour and this can matter if there are a lot of cues. Part-of: --- a/gst/wavparse/gstwavparse.c +++ b/gst/wavparse/gstwavparse.c @@ -826,11 +826,11 @@ gst_wavparse_cue_chunk (GstWavParse * wav, const guint8 * data, guint32 size) cue->chunk_start = GST_READ_UINT32_LE (data + 12); cue->block_start = GST_READ_UINT32_LE (data + 16); cue->sample_offset = GST_READ_UINT32_LE (data + 20); - cues = g_list_append (cues, cue); + cues = g_list_prepend (cues, cue); data += 24; } - wav->cues = cues; + wav->cues = g_list_reverse (cues); return TRUE; } -- GitLab