diff --git a/src/opus_private.h b/src/opus_private.h index 44db28d75b3e4a0ce8210fec7d637ae6e799c36c..63338feef1db59f32b971986d0db0e6b6aa43ea3 100644 --- a/src/opus_private.h +++ b/src/opus_private.h @@ -110,10 +110,15 @@ int opus_decode_native(OpusDecoder *st, const unsigned char *data, opus_int32 le /* Make sure everything is properly aligned. */ static OPUS_INLINE int align(int i) { + int size; /* Alignment is determined by the max size of void*, opus_int32 and opus_val32, rounded up to the nearest power of two. */ - int size = 1 << EC_ILOG(((sizeof(opus_int32)-1)|(sizeof(opus_val32)-1)|(sizeof(void*)-1))); - return (i+(int)size-1)&-(int)size; + int tmp = (sizeof(opus_int32)-1)|(sizeof(opus_val32)-1)|(sizeof(void*)-1); + if (tmp == 0) + size = 1; + else + size = 1 << EC_ILOG(tmp); + return (i+size-1)&-size; } int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,