video: bmp: Fix video_display_rle8_bitmap()
authorPatrice Chotard <patrice.chotard@st.com>
Wed, 20 Nov 2019 13:11:16 +0000 (14:11 +0100)
committerAnatolij Gustschin <agust@denx.de>
Fri, 6 Dec 2019 08:07:45 +0000 (09:07 +0100)
In case the BMP size is bigger than the frame buffer, don't use
the BMP's width and height in video_display_rle8_bitmap, but the
one's checked in video_bmp_display() as parameters to
video_display_rle8_bitmap().

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
CC: Yannick Fertré <yannick.fertre@st.com>
drivers/video/video_bmp.c

index 2c3d2e6e36b025d0cd33d9d53cb12082f152f7f5..876822802949505de2315a014c1d8769af9d4bc3 100644 (file)
@@ -40,18 +40,16 @@ static void draw_encoded_bitmap(ushort **fbp, ushort col, int cnt)
 
 static void video_display_rle8_bitmap(struct udevice *dev,
                                      struct bmp_image *bmp, ushort *cmap,
 
 static void video_display_rle8_bitmap(struct udevice *dev,
                                      struct bmp_image *bmp, ushort *cmap,
-                                     uchar *fb, int x_off, int y_off)
+                                     uchar *fb, int x_off, int y_off,
+                                     ulong width, ulong height)
 {
        struct video_priv *priv = dev_get_uclass_priv(dev);
        uchar *bmap;
 {
        struct video_priv *priv = dev_get_uclass_priv(dev);
        uchar *bmap;
-       ulong width, height;
        ulong cnt, runlen;
        int x, y;
        int decode = 1;
 
        debug("%s\n", __func__);
        ulong cnt, runlen;
        int x, y;
        int decode = 1;
 
        debug("%s\n", __func__);
-       width = get_unaligned_le32(&bmp->header.width);
-       height = get_unaligned_le32(&bmp->header.height);
        bmap = (uchar *)bmp + get_unaligned_le32(&bmp->header.data_offset);
 
        x = 0;
        bmap = (uchar *)bmp + get_unaligned_le32(&bmp->header.data_offset);
 
        x = 0;
@@ -277,7 +275,7 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
                                return -EPROTONOSUPPORT;
                        }
                        video_display_rle8_bitmap(dev, bmp, cmap_base, fb, x,
                                return -EPROTONOSUPPORT;
                        }
                        video_display_rle8_bitmap(dev, bmp, cmap_base, fb, x,
-                                                 y);
+                                                 y, width, height);
                        break;
                }
 #endif
                        break;
                }
 #endif