summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik de Castro Lopo <erikd@mega-nerd.com>2019-11-11 06:42:11 +1100
committerErik de Castro Lopo <erikd@mega-nerd.com>2019-11-11 11:42:34 +1100
commitb3f55c40cc6e00ee4ae1560b5449e54d3f7012b4 (patch)
tree5eaf48ec2e06c71d3f1a04ede89d8b298a54753f
parentc7d3bd80cf63b0fcac6869c10bc45890b9dc032a (diff)
downloadflac-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.c2
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;
}