On Fr, Jan 06, 2012 at 20:40:11 (CET), Justin Ruggles wrote:

> On 01/06/2012 01:52 PM, Reinhard Tartler wrote:
>
>> On Fri, Jan 6, 2012 at 12:02 AM, Jason Garrett-Glaser <ja...@x264.com> wrote:
>>> On Thu, Jan 5, 2012 at 1:01 PM, Reinhard Tartler <siret...@tauware.de> 
>>> wrote:
>>>> From: Chris Evans <cev...@chromium.org>
>>>>
>>>> Fixes Bug: #190
>>>> Chromium Bug: #100543
>>>> Related to CVE-2011-3893
>>>>
>>>> Signed-off-by: Reinhard Tartler <siret...@tauware.de>
>>>> ---
>>>>  libavcodec/vorbis.c |    6 +++---
>>>>  1 files changed, 3 insertions(+), 3 deletions(-)
>>>>
>>>> I've implemented Ronald's second suggestion.
>>>>
>>>> diff --git a/libavcodec/vorbis.c b/libavcodec/vorbis.c
>>>> index 86df288..66364d1 100644
>>>> --- a/libavcodec/vorbis.c
>>>> +++ b/libavcodec/vorbis.c
>>>> @@ -152,7 +152,7 @@ void ff_vorbis_ready_floor1_list(vorbis_floor1_entry * 
>>>> list, int values)
>>>>     }
>>>>  }
>>>>
>>>> -static inline void render_line_unrolled(intptr_t x, intptr_t y, int x1,
>>>> +static inline void render_line_unrolled(intptr_t x, unsigned char y, int 
>>>> x1,
>>>>                                         intptr_t sy, int ady, int adx,
>>>>                                         float *buf)
>>>>  {
>>>> @@ -175,7 +175,7 @@ static inline void render_line_unrolled(intptr_t x, 
>>>> intptr_t y, int x1,
>>>>     }
>>>>  }
>>>>
>>>> -static void render_line(int x0, int y0, int x1, int y1, float *buf)
>>>> +static void render_line(int x0, unsigned char y0, int x1, int y1, float 
>>>> *buf)
>>>>  {
>>>>     int dy  = y1 - y0;
>>>>     int adx = x1 - x0;
>>>> @@ -187,7 +187,7 @@ static void render_line(int x0, int y0, int x1, int 
>>>> y1, float *buf)
>>>>     } else {
>>>>         int base = dy / adx;
>>>>         int x    = x0;
>>>> -        int y    = y0;
>>>> +        unsigned char y = y0;
>>>>         int err  = -adx;
>>>>         ady -= FFABS(base) * adx;
>>>>         while (++x < x1) {
>>>> --
>>>
>>> Relying on undefined language behavior to solve a problem is a terrible 
>>> idea.
>> 
>> What part of the patch is undefined behavior?
>
>
> I also thought this was undefined or implementation-defined, but after
> another look I think it's fine. Whether or not it's "correct" behavior
> for Vorbis is unclear, but implicit casting from int to uint8_t seems to
> be defined behavior from what i can tell.
>
> So either patch looks ok I suppose.

pushed.

-- 
Gruesse/greetings,
Reinhard Tartler, KeyID 945348A4
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to