diff --git a/media/base/multi_channel_resampler.cc b/media/base/multi_channel_resampler.cc index 019bd8fa6df37..9fd0e15ade1bb 100644 --- a/media/base/multi_channel_resampler.cc +++ b/media/base/multi_channel_resampler.cc @@ -48,7 +48,14 @@ MultiChannelResampler::MultiChannelResampler(int channels, MultiChannelResampler::~MultiChannelResampler() = default; void MultiChannelResampler::Resample(int frames, AudioBus* audio_bus) { - DCHECK_EQ(static_cast(audio_bus->channels()), resamplers_.size()); + // SECURITY: When SnooperNode is configured with input_params and + // output_params that both use CHANNEL_LAYOUT_DISCRETE but have different + // channel counts, it picks ChannelMixStrategy::kNone and calls Resample() + // with an output_bus whose channel count exceeds resamplers_.size(). The + // extra channels are then left uninitialized and disclosed to the renderer + // via loopback shared memory. Upgrade the existing DCHECK to a CHECK so the + // mismatch becomes a safe crash instead of a cross-process heap leak. + CHECK_EQ(static_cast(audio_bus->channels()), resamplers_.size()); const size_t total_frames = base::checked_cast(frames); // Optimize the single channel case to avoid the chunking process below.