[FFmpeg-cvslog] atrac3: avoid oversized shifting in decode_bytes()
Xi Wang
git at videolan.org
Sun Sep 22 17:43:10 CEST 2013
ffmpeg | branch: release/0.8 | Xi Wang <xi.wang at gmail.com> | Fri Mar 15 06:31:21 2013 -0400| [78889be3fb4b78a980de283a80a6eabb307db882] | committer: Reinhard Tartler
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 at libav.org
Signed-off-by: Xi Wang <xi.wang at gmail.com>
Signed-off-by: Luca Barbato <lu_zero at gentoo.org>
(cherry picked from commit eba1ff31304e407db3cefd7532108408f364367b)
Conflicts:
libavcodec/atrac3.c
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=78889be3fb4b78a980de283a80a6eabb307db882
---
libavcodec/atrac3.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/libavcodec/atrac3.c b/libavcodec/atrac3.c
index 914998e..7831225 100644
--- a/libavcodec/atrac3.c
+++ b/libavcodec/atrac3.c
@@ -179,8 +179,11 @@ static int decode_bytes(const uint8_t* inbuffer, uint8_t* out, int bytes){
uint32_t* obuf = (uint32_t*) out;
off = (intptr_t)inbuffer & 3;
- buf = (const uint32_t*) (inbuffer - off);
- c = av_be2ne32((0x537F6103 >> (off*8)) | (0x537F6103 << (32-(off*8))));
+ buf = (const uint32_t *)(inbuffer - off);
+ 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++)
obuf[i] = c ^ buf[i];
More information about the ffmpeg-cvslog
mailing list