[U-Boot] [PATCH v4 01/15] video: bmp: check resolutions of panel/bitmap

Yannick Fertré yannick.fertre at st.com
Fri Sep 13 09:47:49 UTC 2019


If the size of the bitmap is bigger than the size of
the panel then errors appear when calculating axis alignment
and the copy of bitmap is done outside of framebuffer.

Signed-off-by: Yannick Fertré <yannick.fertre at st.com>
---
 drivers/video/video_bmp.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/video/video_bmp.c b/drivers/video/video_bmp.c
index 193f37d..544bd5f 100644
--- a/drivers/video/video_bmp.c
+++ b/drivers/video/video_bmp.c
@@ -54,6 +54,13 @@ static void video_display_rle8_bitmap(struct udevice *dev,
 	height = get_unaligned_le32(&bmp->header.height);
 	bmap = (uchar *)bmp + get_unaligned_le32(&bmp->header.data_offset);
 
+	/* check if picture size exceed panel size */
+	if (priv->xsize < width)
+		width = priv->xsize;
+
+	if (priv->ysize < height)
+		height = priv->ysize;
+
 	x = 0;
 	y = height - 1;
 
@@ -249,6 +256,13 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
 
 	padded_width = (width & 0x3 ? (width & ~0x3) + 4 : width);
 
+	/* check if picture size exceed panel size */
+	if (pwidth < width)
+		width = pwidth;
+
+	if (priv->ysize < height)
+		height = priv->ysize;
+
 	if (align) {
 		video_splash_align_axis(&x, priv->xsize, width);
 		video_splash_align_axis(&y, priv->ysize, height);
-- 
2.7.4



More information about the U-Boot mailing list