diff options
author | Xi Wang <xi.wang@gmail.com> | 2013-03-15 06:31:21 -0400 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2013-03-15 12:51:10 +0100 |
commit | eba1ff31304e407db3cefd7532108408f364367b (patch) | |
tree | 74d543d27b3ead36593af0ed2571dea4810cef43 | |
parent | c42e2625130204733916e6ffb1a86ccdffe5fe71 (diff) | |
download | ffmpeg-eba1ff31304e407db3cefd7532108408f364367b.tar.gz |
atrac3: avoid oversized shifting in decode_bytes()
When `off' is 0, `0x537F6103 << 32' in the following expression invokes
undefined behavior, the result of which is not necessarily 0.
(0x537F6103 >> (off * 8)) | (0x537F6103 << (32 - (off * 8)))
Avoid oversized shifting.
CC: libav-stable@libav.org
Signed-off-by: Xi Wang <xi.wang@gmail.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
-rw-r--r-- | libavcodec/atrac3.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libavcodec/atrac3.c b/libavcodec/atrac3.c index da0bff0bf3..a52c5c618a 100644 --- a/libavcodec/atrac3.c +++ b/libavcodec/atrac3.c @@ -163,7 +163,10 @@ static int decode_bytes(const uint8_t *input, uint8_t *out, int bytes) off = (intptr_t)input & 3; buf = (const uint32_t *)(input - off); - c = av_be2ne32((0x537F6103 >> (off * 8)) | (0x537F6103 << (32 - (off * 8)))); + if (off) + c = av_be2ne32((0x537F6103U >> (off * 8)) | (0x537F6103U << (32 - (off * 8)))); + else + c = av_be2ne32(0x537F6103U); bytes += 3 + off; for (i = 0; i < bytes / 4; i++) output[i] = c ^ buf[i]; |