diff --git a/libavcodec/wavpack.c b/libavcodec/wavpack.c
index a4ba07fc834d743e904dceeaf2a0cc9017cb47f5..943e46a25cae9699c7e55bd220a9fe478df644cc 100644
--- a/libavcodec/wavpack.c
+++ b/libavcodec/wavpack.c
@@ -273,7 +273,7 @@ static inline int wv_get_value_integer(WavpackFrameContext *s, uint32_t *crc,
     unsigned bit;
 
     if (s->extra_bits) {
-        S <<= s->extra_bits;
+        S *= 1 << s->extra_bits;
 
         if (s->got_extra_bits &&
             get_bits_left(&s->gb_extra_bits) >= s->extra_bits) {