shithub: opus

Download patch

ref: 914476c6531f63a69f66a1e8af20050a21bcdf21
parent: b66080a8794f7e49d519a8e3e063ae5c645f465e
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Mon Jun 27 19:44:18 EDT 2016

Fixes an invalid read in compute_stereo_width() for 2.5 ms frames at 12 kHz

That's the only size that's not a multiple of 4, so we just discard 2 samples
from the calculation.

--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -873,7 +873,10 @@
    frame_rate = Fs/frame_size;
    short_alpha = Q15ONE - MULT16_16(25, Q15ONE)/IMAX(50,frame_rate);
    xx=xy=yy=0;
-   for (i=0;i<frame_size;i+=4)
+   /* Unroll by 4. The frame size is always a multiple of 4 *except* for
+      2.5 ms frames at 12 kHz. Since this setting is very rare (and very
+      stupid), we just discard the last two samples. */
+   for (i=0;i<frame_size-3;i+=4)
    {
       opus_val32 pxx=0;
       opus_val32 pxy=0;