Skip to content

shift exponent is too large in dav1d_get_bits() src/getbits.c

Found with commit 6ac49461

This issue is hit frequently when fuzzing.

Steps to reproduce:

  1. build dav1d with UndefinedBehaviorSanitizer (-fsanitize=shift)
  2. replay testcase with dav1d fuzzer

testcase.ivf

src/getbits.c:72:18: runtime error: shift exponent 64 is too large for 64-bit type 'uint64_t' (aka 'unsigned long')
    #0 0x6db6c9 in dav1d_get_bits src/getbits.c
    #1 0x6db934 in dav1d_get_uniform src/getbits.c:86:24
    #2 0x525264 in parse_frame_hdr src/obu.c:462:36
    #3 0x51d859 in dav1d_parse_obus src/obu.c:1027:20
    #4 0x517fc4 in dav1d_decode src/lib.c:193:20
    #5 0x51299e in LLVMFuzzerTestOneInput tests/libfuzzer/dav1d_fuzzer.c:75:19
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information