diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-01 09:15:13 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-01 09:15:13 +0000 |
commit | ac8df38f44b1411cb17095449953cfc0bf89e147 (patch) | |
tree | fa78e437c985f4bb80006c0ddc560e78eb409e1c /media | |
parent | 2f00037cc6fabf184388c175b26818aa179531c6 (diff) | |
download | chromium_src-ac8df38f44b1411cb17095449953cfc0bf89e147.zip chromium_src-ac8df38f44b1411cb17095449953cfc0bf89e147.tar.gz chromium_src-ac8df38f44b1411cb17095449953cfc0bf89e147.tar.bz2 |
Prevent AudioBus::set_frames(0). Ensure channels > 0.
BUG=none
TEST=none
Review URL: https://codereview.chromium.org/55393003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232317 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/base/audio_bus.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/media/base/audio_bus.cc b/media/base/audio_bus.cc index 518d83c..c1123471 100644 --- a/media/base/audio_bus.cc +++ b/media/base/audio_bus.cc @@ -5,6 +5,7 @@ #include "media/base/audio_bus.h" #include "base/logging.h" +#include "base/safe_numerics.h" #include "media/audio/audio_parameters.h" #include "media/base/limits.h" #include "media/base/vector_math.h" @@ -82,9 +83,10 @@ static void ToInterleavedInternal(const AudioBus* source, int start_frame, } } -static void ValidateConfig(size_t channels, int frames) { +static void ValidateConfig(int channels, int frames) { CHECK_GT(frames, 0); - CHECK_LE(channels, static_cast<size_t>(limits::kMaxChannels)); + CHECK_GT(channels, 0); + CHECK_LE(channels, static_cast<int>(limits::kMaxChannels)); } static void CheckOverflow(int start_frame, int frames, int total_frames) { @@ -127,7 +129,8 @@ AudioBus::AudioBus(int frames, const std::vector<float*>& channel_data) : channel_data_(channel_data), frames_(frames), can_set_channel_data_(false) { - ValidateConfig(channel_data_.size(), frames_); + ValidateConfig( + base::checked_numeric_cast<int>(channel_data_.size()), frames_); // Sanity check wrapped vector for alignment and channel count. for (size_t i = 0; i < channel_data_.size(); ++i) @@ -138,6 +141,7 @@ AudioBus::AudioBus(int channels) : channel_data_(channels), frames_(0), can_set_channel_data_(true) { + CHECK_GT(channels, 0); for (size_t i = 0; i < channel_data_.size(); ++i) channel_data_[i] = NULL; } @@ -190,6 +194,7 @@ void AudioBus::SetChannelData(int channel, float* data) { void AudioBus::set_frames(int frames) { CHECK(can_set_channel_data_); + ValidateConfig(static_cast<int>(channel_data_.size()), frames); frames_ = frames; } |