Always call IsOk() to ensure audio codec configuration is valid when negotiating. We should avoid creating codecs with invalid parameters, since this can expose security issues. For many codecs the IsOk() method to check the codec config is only called in DCHECKs. This CL ensures IsOk() is always called, also in non-debug builds. Bug: chromium:1265806 Change-Id: Ibd3c6c65d3bb547cd2603e11808ac40ac693a8b1 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/238801 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Ivo Creusen <ivoc@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35422}
diff --git a/api/audio_codecs/opus/audio_decoder_opus.cc b/api/audio_codecs/opus/audio_decoder_opus.cc index 6b4e0d3..7e0d88b 100644 --- a/api/audio_codecs/opus/audio_decoder_opus.cc +++ b/api/audio_codecs/opus/audio_decoder_opus.cc
@@ -51,7 +51,10 @@ num_channels) { Config config; config.num_channels = *num_channels; - RTC_DCHECK(config.IsOk()); + if (!config.IsOk()) { + RTC_DCHECK_NOTREACHED(); + return absl::nullopt; + } return config; } else { return absl::nullopt; @@ -71,7 +74,10 @@ std::unique_ptr<AudioDecoder> AudioDecoderOpus::MakeAudioDecoder( Config config, absl::optional<AudioCodecPairId> /*codec_pair_id*/) { - RTC_DCHECK(config.IsOk()); + if (!config.IsOk()) { + RTC_DCHECK_NOTREACHED(); + return nullptr; + } return std::make_unique<AudioDecoderOpusImpl>(config.num_channels, config.sample_rate_hz); }
diff --git a/api/audio_codecs/opus/audio_encoder_opus.cc b/api/audio_codecs/opus/audio_encoder_opus.cc index 36d82b3..6d950c5 100644 --- a/api/audio_codecs/opus/audio_encoder_opus.cc +++ b/api/audio_codecs/opus/audio_encoder_opus.cc
@@ -33,6 +33,10 @@ const AudioEncoderOpusConfig& config, int payload_type, absl::optional<AudioCodecPairId> /*codec_pair_id*/) { + if (!config.IsOk()) { + RTC_DCHECK_NOTREACHED(); + return nullptr; + } return AudioEncoderOpusImpl::MakeAudioEncoder(config, payload_type); }