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
