qtdemux: Make sure only an even number of bytes is processed when handling CEA608...
authorSebastian Dröge <sebastian@centricular.com>
Thu, 26 Sep 2024 06:20:28 +0000 (09:20 +0300)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 3 Dec 2024 17:15:04 +0000 (17:15 +0000)
An odd number of bytes would lead to out of bound reads and writes, and doesn't
make any sense as CEA608 comes in byte pairs.

Strip off any leftover bytes and assume everything before that is valid.

Thanks to Antonio Morales for finding and reporting the issue.

Fixes GHSL-2024-195
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3841

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

subprojects/gst-plugins-good/gst/isomp4/qtdemux.c

index c14d939ee3c9ac418fbd4b7d7e01236b1cb07a02..b9f466991adf37178f389c6d7595fe8009370120 100644 (file)
@@ -6145,6 +6145,11 @@ convert_to_s334_1a (const guint8 * ccpair, guint8 ccpair_size, guint field,
   guint8 *storage;
   gsize i;
 
+  /* Strip off any leftover odd bytes and assume everything before is valid */
+  if (ccpair_size % 2 != 0) {
+    ccpair_size -= 1;
+  }
+
   /* We are converting from pairs to triplets */
   *res = ccpair_size / 2 * 3;
   storage = g_malloc (*res);