On 12.05.2015 21:12, Michael Niedermayer wrote:
> On Tue, May 12, 2015 at 04:02:44PM +0200, Andreas Cadhalpun wrote:
>> On 12.05.2015 14:51, Michael Niedermayer wrote:
>>> On Tue, May 12, 2015 at 02:31:38PM +0200, Andreas Cadhalpun wrote:
>>>> @@ -108,6 +109,14 @@ static int decode_packet(int *got_frame, int cached)
>>>>                            (const uint8_t **)(frame->data), 
>>>> frame->linesize,
>>>>                            pix_fmt, width, height);
>>>>  
>>>> +            if ((desc->flags & AV_PIX_FMT_FLAG_PAL ||
>>>> +                 desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) &&
>>>> +                video_dst_data[1] - video_dst_data[0] > 
>>>> video_dst_linesize[0] * height) {
>>>> +                /* zero-initialize the padding before the palette */
>>>> +                memset(video_dst_data[0] + video_dst_linesize[0] * 
>>>> height, 0,
>>>> +                       video_dst_data[1] - video_dst_data[0] - 
>>>> video_dst_linesize[0] * height);
>>>> +            }
>>>
>>> i wonder if this shouldnt be moved to av_image_alloc() ?
>>
>> It's a bit nicer to do this in av_image_fill_pointers.
> 
> yes but thats not safe
> 
> for example rawdec calls avpicture_fill() on the input buffer
> which uses av_image_fill_pointers()

OK, then let's do it in av_image_alloc.

Best regards,
Andreas

>From c244cba6812bcb15f871b72e721fc3310f6c983f Mon Sep 17 00:00:00 2001
From: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
Date: Tue, 12 May 2015 21:45:42 +0200
Subject: [PATCH] imgutils: initialize palette padding bytes in av_image_alloc

av_image_fill_pointers always aligns the palette, but the padding
bytes don't (and can't) get initialized in av_image_copy.

Thus initialize them in av_image_alloc.

This fixes 'Syscall param write(buf) points to uninitialised byte(s)'
valgrind warnings.

Signed-off-by: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
---
 libavutil/imgutils.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c
index a8bc18d..ef0e671 100644
--- a/libavutil/imgutils.c
+++ b/libavutil/imgutils.c
@@ -219,6 +219,14 @@ int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
     if (desc->flags & AV_PIX_FMT_FLAG_PAL || desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL)
         avpriv_set_systematic_pal2((uint32_t*)pointers[1], pix_fmt);
 
+    if ((desc->flags & AV_PIX_FMT_FLAG_PAL ||
+         desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) &&
+        pointers[1] - pointers[0] > linesizes[0] * h) {
+        /* zero-initialize the padding before the palette */
+        memset(pointers[0] + linesizes[0] * h, 0,
+               pointers[1] - pointers[0] - linesizes[0] * h);
+    }
+
     return ret;
 }
 
-- 
2.1.4

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to