diff --git a/libavcodec/alac.c b/libavcodec/alac.c
index b143d3a9d472ce89980ec2a6587f413e6e30b38c..e99b12b0e022eabb2f860d2afbfef595e3c85e4f 100644
--- a/libavcodec/alac.c
+++ b/libavcodec/alac.c
@@ -226,18 +226,20 @@ static void bastardized_rice_decompress(ALACContext *alac,
 
                 k = count_leading_zeros(history) + ((history + 16) >> 6 /* / 64 */) - 24;
 
-                extrabits = show_bits(&alac->gb, k);
+                if (k >= rice_kmodifier)
+                    k = rice_kmodifier;
 
-                block_size = (((1 << k) - 1) & rice_kmodifier_mask) * x
-                           + extrabits - 1;
+                x = (x << k) - x;
+
+                extrabits = show_bits(&alac->gb, k);
 
                 if (extrabits < 2) {
-                    x = 1 - extrabits;
-                    block_size += x;
                     skip_bits(&alac->gb, k - 1);
                 } else {
+                    x += extrabits - 1;
                     skip_bits(&alac->gb, k);
                 }
+                block_size = x;
             }
 
             if (block_size > 0) {