diff --git a/src/libFLAC/bitbuffer.c b/src/libFLAC/bitbuffer.c index 0a9645da..1eb32df6 100644 --- a/src/libFLAC/bitbuffer.c +++ b/src/libFLAC/bitbuffer.c @@ -1333,7 +1333,11 @@ bool FLAC__bitbuffer_read_raw_int64(FLAC__BitBuffer *bb, int64 *val, const unsig /* we hold off updating bb->total_consumed_bits until the end */ } else { - *val = (bb->buffer[bb->consumed_bytes] & (0xff >> bb->consumed_bits)) >> (i-bits_); + /* bits_ must be < 7 if we get to here */ + v = (bb->buffer[bb->consumed_bytes] & (0xff >> bb->consumed_bits)); + v <<= (64-i); + *val = (int64)v; + *val >>= (64-bits_); bb->consumed_bits += bits_; bb->total_consumed_bits += bits_; return true;