From eea063fb955d801f426200a1dbf8608d4981b572 Mon Sep 17 00:00:00 2001 From: Karl Wiberg Date: Thu, 14 Sep 2017 13:49:13 +0200 Subject: [PATCH] Reject configs with ridiculously many channels instead of crashing We hit this CHECK even though the format wasn't even L16, because we did the checked_cast before testing the codec name. BUG=chromium:760994 TBR=ossu@webrtc.org Change-Id: I382a2f841e51944495500f87650258024030d355 Reviewed-on: https://webrtc-review.googlesource.com/1224 Reviewed-by: Karl Wiberg Commit-Queue: Karl Wiberg Cr-Commit-Position: refs/heads/master@{#19835} --- webrtc/api/audio_codecs/L16/audio_encoder_L16.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/webrtc/api/audio_codecs/L16/audio_encoder_L16.cc b/webrtc/api/audio_codecs/L16/audio_encoder_L16.cc index a0acfe7664..99af03d87d 100644 --- a/webrtc/api/audio_codecs/L16/audio_encoder_L16.cc +++ b/webrtc/api/audio_codecs/L16/audio_encoder_L16.cc @@ -20,9 +20,12 @@ namespace webrtc { rtc::Optional AudioEncoderL16::SdpToConfig( const SdpAudioFormat& format) { + if (!rtc::IsValueInRangeForNumericType(format.num_channels)) { + return rtc::Optional(); + } Config config; config.sample_rate_hz = format.clockrate_hz; - config.num_channels = rtc::checked_cast(format.num_channels); + config.num_channels = rtc::dchecked_cast(format.num_channels); return STR_CASE_CMP(format.name.c_str(), "L16") == 0 && config.IsOk() ? rtc::Optional(config) : rtc::Optional();