diff options
author | Erik de Castro Lopo <erikd@mega-nerd.com> | 2019-11-11 06:42:11 +1100 |
---|---|---|
committer | Erik de Castro Lopo <erikd@mega-nerd.com> | 2019-11-11 11:42:34 +1100 |
commit | b3f55c40cc6e00ee4ae1560b5449e54d3f7012b4 (patch) | |
tree | 5eaf48ec2e06c71d3f1a04ede89d8b298a54753f | |
parent | c7d3bd80cf63b0fcac6869c10bc45890b9dc032a (diff) | |
download | flac-b3f55c40cc6e00ee4ae1560b5449e54d3f7012b4.tar.gz |
libFLAC/bitreader.c: Fix shift invoking undefined behaviour
Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=18589
Testcase: fuzzer_decoder-5668806471188480
-rw-r--r-- | src/libFLAC/bitreader.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/libFLAC/bitreader.c b/src/libFLAC/bitreader.c index 3df4d02c..d2c058d9 100644 --- a/src/libFLAC/bitreader.c +++ b/src/libFLAC/bitreader.c @@ -462,7 +462,7 @@ FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, return false; /* sign-extend *val assuming it is currently bits wide. */ /* From: https://graphics.stanford.edu/~seander/bithacks.html#FixedSignExtend */ - mask = 1u << (bits - 1); + mask = bits >= 33 ? 0 : 1u << (bits - 1); *val = (uval ^ mask) - mask; return true; } |