diff --git a/chromecast/media/audio/cast_audio_bus.cc b/chromecast/media/audio/cast_audio_bus.cc index b70e8ccfe488c..7d8c32b765d8f 100644 --- a/chromecast/media/audio/cast_audio_bus.cc +++ b/chromecast/media/audio/cast_audio_bus.cc @@ -7,17 +7,25 @@ #include #include +#include "base/check_op.h" #include "base/compiler_specific.h" #include "base/memory/ptr_util.h" +#include "base/numerics/checked_math.h" namespace chromecast { namespace media { CastAudioBus::CastAudioBus(int channels, int frames) : frames_(frames) { - data_.reset(new float[channels * frames]); + CHECK_GE(channels, 0); + CHECK_GE(frames, 0); + const size_t total = base::CheckMul(static_cast(channels), + static_cast(frames)) + .ValueOrDie(); + data_.reset(new float[total]); channel_data_.reserve(channels); for (int i = 0; i < channels; ++i) - channel_data_.push_back(UNSAFE_TODO(data_.get() + i * frames)); + channel_data_.push_back(UNSAFE_TODO( + data_.get() + static_cast(i) * static_cast(frames))); } CastAudioBus::~CastAudioBus() = default; @@ -28,7 +36,9 @@ std::unique_ptr CastAudioBus::Create(int channels, int frames) { } void CastAudioBus::Zero() { - std::fill_n(data_.get(), frames() * channels(), 0); + std::fill_n(data_.get(), + static_cast(frames()) * static_cast(channels()), + 0); } } // namespace media