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

Yannick FERTRE yannick.fertre at st.com
Fri Oct 25 07:55:49 UTC 2019


Hello Heinrich,

Sorry for the delay.

This match is not superfluous. On the STM32F746 board, a bitmap larger 
than the panel resolution is embedded.

Without this patch, the board does not boot.

I propose to send an additional patch that checks the coordinates.

Best regards

-- 
Yannick Fertré Microcontrollers and Digital ICs Group | 
Microcontrolleurs Division


On 10/24/19 10:43 PM, Heinrich Schuchardt wrote:
> On 10/24/19 4:05 PM, Patrice CHOTARD wrote:
>> Hi Heinrich, all
>>
>> On 10/7/19 7:34 PM, Heinrich Schuchardt wrote:
>>> On 10/7/19 3:29 PM, Yannick Fertré wrote:
>>>> 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 | 7 +++++++
>>>>    1 file changed, 7 insertions(+)
>>>>
>>>> diff --git a/drivers/video/video_bmp.c b/drivers/video/video_bmp.c
>>>> index 193f37d..4af1fb4 100644
>>>> --- a/drivers/video/video_bmp.c
>>>> +++ b/drivers/video/video_bmp.c
>>>> @@ -249,6 +249,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 exceeds panel size */
>>>> +    if ((pwidth < width) || (priv->ysize < height)) {
>>>> +        printf("Error: BMP size %d x %d is bigger than panel size 
>>>> %d x %d\n",
>>>> +               (int)width, (int)height, priv->xsize, priv->ysize);
>>>> +        return -EINVAL;
>>>> +    }
>>>> +
>>>>        if (align) {
>>>>            video_splash_align_axis(&x, priv->xsize, width);
>>>>            video_splash_align_axis(&y, priv->ysize, height);
>>>
>>> This is followed by:
>>>
>>>          if ((x + width) > pwidth)
>>>                  width = pwidth - x;
>>>          if ((y + height) > priv->ysize)
>>>                  height = priv->ysize - y;
>>>
>>> These lines will clip a bitmap that given the left upper corner x, y
>>> does not fit onto the screen.
>>>
>>> So isn't this patch superfluous?
>>>
>>> What is missing are checks for x and y.
>>>
>>> For testing I have used qemu_x86 and added
>>>
>>>      #define CONFIG_BMP_24BPP y
>>>
>>> to the top of drivers/video/video_bmp.c and loaded a 24bit bitmap.
>>>
>>> Clipping works as expected. But passing a value of x exceeding the
>>> screen width lead to a crash.
>>>
>>> What I really dislike in the existing coding is that CONFIG_BMP_*BPP is
>>> defined in includes instead of using Kconfig but that is a different 
>>> story.
>>>
>>> Best regards
>>>
>>> Heinrich
>>
>> For information all this series patches have been applied on 
>> u-boot/master excepts  this one.
>>
>> Unfortunately, without this patch, stm32f746-discovery board doesn't 
>> boot anymore.
>
> I still do not understand why this patch is needed.
>
> Could you, please, try to analyze why the board does not boot.
>
> What is wrong with the existing code for clipping?
> Or is the non-booting just coincidence but the bug is somewhere else?
>
> What are the values of the parameters passed to video_bmp_display()?
> Which bitmap file are you using?
> What is the size of the display?
>
> Best regards
>
> Heinrich
>
>>
>> Heinrich, could this patch be merged, waiting for a clean patch from 
>> Yannick ?
>>
>> Regards
>>
>> Patrice
>>


More information about the U-Boot mailing list