Extra safety against NaNs in surround_analysis()
authorMark Harris <mark.hsj@gmail.com>
Wed, 7 Oct 2015 13:21:23 +0000 (09:21 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Wed, 7 Oct 2015 13:23:33 +0000 (09:23 -0400)
Fix out-of-bounds memory read in multichannel surround analysis
with float input that contains NaNs.  Found by afl-fuzz.

Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
src/opus_multistream_encoder.c

index b55ab7a..aa6a267 100644 (file)
@@ -202,7 +202,7 @@ static opus_val16 logSum(opus_val16 a, opus_val16 b)
       max = b;
       diff = SUB32(EXTEND32(b),EXTEND32(a));
    }
-   if (diff >= QCONST16(8.f, DB_SHIFT))
+   if (!(diff < QCONST16(8.f, DB_SHIFT)))  /* inverted to catch NaNs */
       return max;
 #ifdef FIXED_POINT
    low = SHR32(diff, DB_SHIFT-1);