mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
bitstream: Avoid undefined behavior in bitstream_skip()
Do not use skip_remaining() to fully wipe the cache, as this could do a 64-bit shift of a 64-bit variable which is undefined behavior in C. Instead set the related variables to zero directly. Thanks to Uoti for pointing out the problem. CC: libav-stable@libav.org
This commit is contained in:
parent
fd92dafaff
commit
79f64f7ebc
@ -239,11 +239,13 @@ static inline void skip_remaining(BitstreamContext *bc, unsigned n)
|
||||
/* Skip n bits in the buffer. */
|
||||
static inline void bitstream_skip(BitstreamContext *bc, unsigned n)
|
||||
{
|
||||
if (n <= bc->bits_left)
|
||||
if (n < bc->bits_left)
|
||||
skip_remaining(bc, n);
|
||||
else {
|
||||
n -= bc->bits_left;
|
||||
skip_remaining(bc, bc->bits_left);
|
||||
bc->bits = 0;
|
||||
bc->bits_left = 0;
|
||||
|
||||
if (n >= 64) {
|
||||
unsigned skip = n / 8;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user