From 486d30379d65dbb6bd34b10e4d26e8f565eab223 Mon Sep 17 00:00:00 2001 From: Randell Jesup Date: Fri, 20 May 2016 01:53:27 -0400 Subject: [PATCH] Bug 1274083: don't return early from rate changes if we overflow r=jmspeex MozReview-Commit-ID: DVSp3VpiIJw --- dom/media/webaudio/AudioBufferSourceNode.cpp | 6 +++++- media/libspeex_resampler/src/resample.c | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dom/media/webaudio/AudioBufferSourceNode.cpp b/dom/media/webaudio/AudioBufferSourceNode.cpp index 4fc3cd593a61..85a80dcc4d60 100644 --- a/dom/media/webaudio/AudioBufferSourceNode.cpp +++ b/dom/media/webaudio/AudioBufferSourceNode.cpp @@ -5,6 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "AudioBufferSourceNode.h" +#include "nsDebug.h" #include "mozilla/dom/AudioBufferSourceNodeBinding.h" #include "mozilla/dom/AudioParam.h" #include "mozilla/FloatingPoint.h" @@ -181,7 +182,10 @@ public: if (mResamplerOutRate == aOutRate) { return; } - speex_resampler_set_rate(mResampler, mBufferSampleRate, aOutRate); + if (speex_resampler_set_rate(mResampler, mBufferSampleRate, aOutRate) != RESAMPLER_ERR_SUCCESS) { + NS_ASSERTION(false, "speex_resampler_set_rate failed"); + return; + } } mResamplerOutRate = aOutRate; diff --git a/media/libspeex_resampler/src/resample.c b/media/libspeex_resampler/src/resample.c index d99595ab12e8..7c6ef1287774 100644 --- a/media/libspeex_resampler/src/resample.c +++ b/media/libspeex_resampler/src/resample.c @@ -1151,7 +1151,9 @@ EXPORT int speex_resampler_set_rate_frac(SpeexResamplerState *st, spx_uint32_t r for (i=0;inb_channels;i++) { if (!_muldiv_safe(st->samp_frac_num[i],st->den_rate,old_den)) - return RESAMPLER_ERR_OVERFLOW; + { + st->samp_frac_num[i] = st->den_rate-1; + } st->samp_frac_num[i]= _muldiv(st->samp_frac_num[i],st->den_rate,old_den); /* Safety net */ if (st->samp_frac_num[i] >= st->den_rate)