shithub: opus

Download patch

ref: e1d41b6ebb07de84840dc1548ee8992abd0dd502
parent: 8b4f3f646d54921a4f9c1f334fb109f105dd52f7
author: Jean-Marc Valin <jeanmarcv@google.com>
date: Thu Feb 27 15:40:58 EST 2025

More warnings about unsigned integer overflows

Silences -fsanitize=unsigned-integer-overflow even though the code was
valid (not undefined) C.

--- a/celt/celt_decoder.c
+++ b/celt/celt_decoder.c
@@ -1242,7 +1242,7 @@
    alloc_trim = tell+(6<<BITRES) <= total_bits ?
          ec_dec_icdf(dec, trim_icdf, 7) : 5;
 
-   bits = (((opus_int32)len*8)<<BITRES) - ec_tell_frac(dec) - 1;
+   bits = (((opus_int32)len*8)<<BITRES) - (opus_int32)ec_tell_frac(dec) - 1;
    anti_collapse_rsv = isTransient&&LM>=2&&bits>=((LM+2)<<BITRES) ? (1<<BITRES) : 0;
    bits -= anti_collapse_rsv;
 
--- a/celt/celt_encoder.c
+++ b/celt/celt_encoder.c
@@ -2377,7 +2377,7 @@
    ALLOC(fine_priority, nbEBands, int);
 
    /* bits =           packet size                    - where we are - safety*/
-   bits = (((opus_int32)nbCompressedBytes*8)<<BITRES) - ec_tell_frac(enc) - 1;
+   bits = (((opus_int32)nbCompressedBytes*8)<<BITRES) - (opus_int32)ec_tell_frac(enc) - 1;
    anti_collapse_rsv = isTransient&&LM>=2&&bits>=((LM+2)<<BITRES) ? (1<<BITRES) : 0;
    bits -= anti_collapse_rsv;
    signalBandwidth = end-1;
--