Using an unsigned variable avoids problems with overflows.
There is further no need for a 64-bit intermediate here.

Signed-off-by: Mans Rullgard <[email protected]>
---
 libavformat/mpc.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/libavformat/mpc.c b/libavformat/mpc.c
index a8f526a..dedbd20 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);
-- 
1.7.7.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to