video-frame: avoid possible out of bound memory access
authorCamilo Celis Guzman <camilo@pexip.com>
Mon, 18 Apr 2022 09:14:44 +0000 (18:14 +0900)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 19 Apr 2022 11:18:52 +0000 (11:18 +0000)
Although the components' initialization code would fill in -1 to all
unset components, make the code a bit more defensive and check for an
index bound first.

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

subprojects/gst-plugins-base/gst-libs/gst/video/video-frame.c

index d920912..a1bfe39 100644 (file)
@@ -283,7 +283,7 @@ scale_tile_shifts (const GstVideoFormatInfo * finfo, gint plane, guint * ws,
     guint * hs)
 {
   gint comp[GST_VIDEO_MAX_COMPONENTS];
-  gint i;
+  gint i = 1;
 
   gst_video_format_info_component (finfo, plane, comp);
 
@@ -294,8 +294,10 @@ scale_tile_shifts (const GstVideoFormatInfo * finfo, gint plane, guint * ws,
   /* for each additional component in the same plane, double the tile width,
    * this should provide the appropriate tile size when the tile size varies
    * base on the subsampling. */
-  for (i = 1; comp[i] >= 0; i++)
+  while (i < GST_VIDEO_MAX_COMPONENTS && comp[i] >= 0) {
     *ws += 1;
+    i++;
+  }
 }