diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-06-27 23:44:18 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-06-27 23:44:18 -0400 |
commit | 914476c6531f63a69f66a1e8af20050a21bcdf21 (patch) | |
tree | fa199327c84b710662f98baee7b739ef3090cc48 | |
parent | b66080a8794f7e49d519a8e3e063ae5c645f465e (diff) | |
download | opus-914476c6531f63a69f66a1e8af20050a21bcdf21.tar.gz |
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.
-rw-r--r-- | src/opus_encoder.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/opus_encoder.c b/src/opus_encoder.c index e7b2f931..7333b718 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -873,7 +873,10 @@ opus_val16 compute_stereo_width(const opus_val16 *pcm, int frame_size, opus_int3 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; |