Message ID | 20240130221612.970-1-jamrial@gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avcodec/get_bits: don't shift more bits than available in an unsigned with get_leb() | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
James Almer: > Signed-off-by: James Almer <jamrial@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
On 1/30/2024 7:19 PM, Andreas Rheinhardt wrote: > James Almer: >> Signed-off-by: James Almer <jamrial@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. Mmh, true. I'll just leave it as is then. So patch withdrawn.
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;
Signed-off-by: James Almer <jamrial@gmail.com> --- libavcodec/get_bits.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)