From d9ba767d615ffb1f51ac3f990c51768ea8622da8 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Sun, 27 Nov 2011 10:29:33 +0000 Subject: [PATCH] musepack: fix signed shift overflow in mpc_read_packet() Using an unsigned variable avoids problems with overflows. There is further no need for a 64-bit intermediate here. Signed-off-by: Mans Rullgard --- libavformat/mpc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavformat/mpc.c b/libavformat/mpc.c index a8f526a627..a67d9ae218 100644 --- a/libavformat/mpc.c +++ b/libavformat/mpc.c @@ -117,7 +117,8 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt) { MPCContext *c = s->priv_data; int ret, size, size2, curbits, cur = c->curframe; - int64_t tmp, pos; + unsigned tmp; + int64_t pos; if (c->curframe >= c->fcount && c->fcount) return -1; @@ -134,8 +135,7 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt) if(curbits <= 12){ size2 = (tmp >> (12 - curbits)) & 0xFFFFF; }else{ - tmp = (tmp << 32) | avio_rl32(s->pb); - size2 = (tmp >> (44 - curbits)) & 0xFFFFF; + size2 = (tmp << (curbits - 12) | avio_rl32(s->pb) >> (44 - curbits)) & 0xFFFFF; } curbits += 20; avio_seek(s->pb, pos, SEEK_SET);