[FFmpeg-devel] [PATCH] avcodec/get_bits: don't shift more bits than available in an unsigned with get_leb()

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Wed Jan 31 00:19:30 EET 2024


James Almer:
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
>  libavcodec/get_bits.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h
> index 9e19d2a439..c0cc7c0a7d 100644
> --- a/libavcodec/get_bits.h
> +++ b/libavcodec/get_bits.h
> @@ -725,7 +725,7 @@ static inline unsigned get_leb(GetBitContext *s) {
>          int byte = get_bits(s, 8);
>          unsigned bits = byte & 0x7f;
>          more = byte & 0x80;
> -        if (i <= 4)
> +        if (i <= 3 || (i == 4 && bits < (1 << 4)))
>              leb |= bits << (i * 7);
>          if (++i == 8)
>              break;

This truncates more bits than necessary, which is IMO against the
documentation of this function.

- Andreas



More information about the ffmpeg-devel mailing list