[FFmpeg-cvslog] atrac3: avoid oversized shifting in decode_bytes()

Xi Wang git at videolan.org
Mon Mar 18 03:10:31 CET 2013


ffmpeg | branch: release/1.1 | Xi Wang <xi.wang at gmail.com> | Fri Mar 15 06:31:21 2013 -0400| [0b0e87bb544be1926c4ee86c25789d5d6c3c6255] | committer: Luca Barbato

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)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0b0e87bb544be1926c4ee86c25789d5d6c3c6255
---

 libavcodec/atrac3.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavcodec/atrac3.c b/libavcodec/atrac3.c
index a46b0b1..910c15e 100644
--- a/libavcodec/atrac3.c
+++ b/libavcodec/atrac3.c
@@ -164,7 +164,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];



More information about the ffmpeg-cvslog mailing list