tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit a9e02918815c2a76fc0053a91ae483cfac014852
parent 7d01ef28639c81386899e4b0827e7be2cf978047
Author: Paul Adenot <paul@paul.cx>
Date:   Tue, 25 Nov 2025 13:16:13 +0000

Bug 1999307 - Check detune for NaN in addition to frequency in AudioBufferSourceNode. r=karlt

The convolver node ends up outputing NaNs, probably because of a malformed file.

Differential Revision: https://phabricator.services.mozilla.com/D272112

Diffstat:
Mdom/media/webaudio/AudioBufferSourceNode.cpp | 10+++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/dom/media/webaudio/AudioBufferSourceNode.cpp b/dom/media/webaudio/AudioBufferSourceNode.cpp @@ -443,10 +443,13 @@ class AudioBufferSourceNodeEngine final : public AudioNodeEngine { int32_t ComputeFinalOutSampleRate(float aPlaybackRate, float aDetune) { float computedPlaybackRate = aPlaybackRate * fdlibm_exp2f(aDetune / 1200.f); - // Make sure the playback rate is something our resampler can work with. + if (std::isnan(computedPlaybackRate)) { + computedPlaybackRate = 1.0f; + } + // Make sure the playback rate is something our resampler can work with int32_t rate = WebAudioUtils::TruncateFloatToInt<int32_t>( mSource->mSampleRate / computedPlaybackRate); - return rate ? rate : mBufferSampleRate; + return rate > 0 ? rate : mBufferSampleRate; } void UpdateSampleRateIfNeeded(uint32_t aChannels, TrackTime aTrackPosition) { @@ -471,9 +474,6 @@ class AudioBufferSourceNodeEngine final : public AudioNodeEngine { } else { detune = mDetuneTimeline.GetComplexValueAtTime(aTrackPosition); } - if (playbackRate <= 0 || std::isnan(playbackRate)) { - playbackRate = 1.0f; - } int32_t outRate = ComputeFinalOutSampleRate(playbackRate, detune); UpdateResampler(outRate, aChannels);