[FFmpeg-devel] [PATCH] avcodec/indeo3data: fix undefined left shift of negative number

Ganesh Ajjanagadde gajjanag at mit.edu
Sat Sep 19 07:21:59 CEST 2015


On Sat, Sep 19, 2015 at 1:02 AM, James Almer <jamrial at gmail.com> wrote:
> On 9/19/2015 1:53 AM, Ganesh Ajjanagadde wrote:
>> This fixes a whole sea of -Wshift-negative-value reported with clang 3.7+, e.g
>> http://fate.ffmpeg.org/log.cgi?time=20150918181527&log=compile&slot=x86_64-darwin-clang-polly-vectorize-stripmine-3.7.
>> Any half decent compiler should anyway optimize away the multiplication.
>>
>> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
>> ---
>>  libavcodec/indeo3data.h | 9 +++++----
>>  1 file changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/libavcodec/indeo3data.h b/libavcodec/indeo3data.h
>> index e7e28a3..7a2df12 100644
>> --- a/libavcodec/indeo3data.h
>> +++ b/libavcodec/indeo3data.h
>> @@ -237,10 +237,11 @@
>>   * Pack two delta values (a,b) into one 16bit word
>>   * according with endianness of the host machine.
>>   */
>> +#define POW_2(n) (1 << (n))
>>  #if HAVE_BIGENDIAN
>> -#define PD(a,b) (((a) << 8) + (b))
>> +#define PD(a,b) (((a) * POW_2(8)) + (b))
>
> #define PD(a,b) (((a) * (1 << 8)) + (b))
>
> Is more in line with previous similar changes. See for example commits 4eee685a,
> e50ae60d and many others.

I have patchv2 on these lines; apply and push whichever you/others wish.

>
> Same for the lines below.
>
>>  #else
>> -#define PD(a,b) (((b) << 8) + (a))
>> +#define PD(a,b) (((b) * POW_2(8)) + (a))
>>  #endif
>>
>>  /**
>> @@ -285,9 +286,9 @@ static const int16_t delta_tab_3_5[79]  = { TAB_3_5 };
>>   * according with endianness of the host machine.
>>   */
>>  #if HAVE_BIGENDIAN
>> -#define PD(a,b) (((a) << 24) + ((a) << 16) + ((b) << 8) + (b))
>> +#define PD(a,b) (((a) * POW_2(24)) + ((a) * POW_2(16)) + ((b) * POW_2(8)) + (b))
>>  #else
>> -#define PD(a,b) (((b) << 24) + ((b) << 16) + ((a) << 8) + (a))
>> +#define PD(a,b) (((b) * POW_2(24)) + ((b) * POW_2(16)) + ((a) * POW_2(8)) + (a))
>>  #endif
>>
>>  /*
>>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


More information about the ffmpeg-devel mailing list