Bug 1404997 - P23. Strongly enforced that our destination buffer is big enough. r=padenot

MozReview-Commit-ID: A1kLsH75SzX

--HG--
extra : rebase_source : bcc4460507638ef36986ad519e48ba2d4596f4cf
This commit is contained in:
Jean-Yves Avenard 2017-12-13 18:44:30 +01:00
parent 485b10a8b0
commit 1769747959
3 changed files with 10 additions and 9 deletions

View file

@ -715,7 +715,6 @@ WebrtcAudioConduit::GetAudioFrame(int16_t speechData[],
{ {
CSFLogDebug(LOGTAG, "%s ", __FUNCTION__); CSFLogDebug(LOGTAG, "%s ", __FUNCTION__);
unsigned int numSamples = 0;
//validate params //validate params
if(!speechData ) if(!speechData )
@ -726,7 +725,7 @@ WebrtcAudioConduit::GetAudioFrame(int16_t speechData[],
} }
// Validate sample length // Validate sample length
if((numSamples = GetNum10msSamplesForFrequency(samplingFreqHz)) == 0 ) if(GetNum10msSamplesForFrequency(samplingFreqHz) == 0)
{ {
CSFLogError(LOGTAG,"%s Invalid Sampling Frequency ", __FUNCTION__); CSFLogError(LOGTAG,"%s Invalid Sampling Frequency ", __FUNCTION__);
MOZ_ASSERT(PR_FALSE); MOZ_ASSERT(PR_FALSE);
@ -749,7 +748,7 @@ WebrtcAudioConduit::GetAudioFrame(int16_t speechData[],
return kMediaConduitSessionNotInited; return kMediaConduitSessionNotInited;
} }
int lengthSamplesAllowed = lengthSamples;
lengthSamples = 0; //output paramter lengthSamples = 0; //output paramter
if (mPtrVoEXmedia->GetAudioFrame(mChannel, if (mPtrVoEXmedia->GetAudioFrame(mChannel,
@ -766,8 +765,8 @@ WebrtcAudioConduit::GetAudioFrame(int16_t speechData[],
// XXX Annoying, have to copy to our buffers -- refactor? // XXX Annoying, have to copy to our buffers -- refactor?
lengthSamples = mAudioFrame.samples_per_channel_ * mAudioFrame.num_channels_; lengthSamples = mAudioFrame.samples_per_channel_ * mAudioFrame.num_channels_;
PodCopy(speechData, mAudioFrame.data_, MOZ_RELEASE_ASSERT(lengthSamples <= lengthSamplesAllowed);
lengthSamples); PodCopy(speechData, mAudioFrame.data_, lengthSamples);
// Not #ifdef DEBUG or on a log module so we can use it for about:webrtc/etc // Not #ifdef DEBUG or on a log module so we can use it for about:webrtc/etc
mSamples += lengthSamples; mSamples += lengthSamples;

View file

@ -140,6 +140,7 @@ public:
* @param speechData [in]: Pointer to a array to which a 10ms frame of audio will be copied * @param speechData [in]: Pointer to a array to which a 10ms frame of audio will be copied
* @param samplingFreqHz [in]: Frequency of the sampling for playback in Hertz (16000, 32000,..) * @param samplingFreqHz [in]: Frequency of the sampling for playback in Hertz (16000, 32000,..)
* @param capture_delay [in]: Estimated Time between reading of the samples to rendering/playback * @param capture_delay [in]: Estimated Time between reading of the samples to rendering/playback
* @param lengthSamples [in]: Contain maximum length of speechData array.
* @param lengthSamples [out]: Will contain length of the audio frame in samples at return. * @param lengthSamples [out]: Will contain length of the audio frame in samples at return.
Ex: A value of 160 implies 160 samples each of 16-bits was copied Ex: A value of 160 implies 160 samples each of 16-bits was copied
into speechData into speechData

View file

@ -2221,9 +2221,11 @@ private:
TrackTicks framesNeeded = aDesiredTime - mPlayedTicks; TrackTicks framesNeeded = aDesiredTime - mPlayedTicks;
while (framesNeeded >= 0) { while (framesNeeded >= 0) {
int16_t scratchBuffer[AUDIO_SAMPLE_BUFFER_MAX_BYTES / sizeof(int16_t)]; const int scratchBufferLength =
AUDIO_SAMPLE_BUFFER_MAX_BYTES / sizeof(int16_t);
int16_t scratchBuffer[scratchBufferLength];
int samplesLength; int samplesLength = scratchBufferLength;
// This fetches 10ms of data, either mono or stereo // This fetches 10ms of data, either mono or stereo
MediaConduitErrorCode err = MediaConduitErrorCode err =
@ -2248,8 +2250,7 @@ private:
PodArrayZero(scratchBuffer); PodArrayZero(scratchBuffer);
} }
MOZ_ASSERT(samplesLength * sizeof(uint16_t) <= MOZ_RELEASE_ASSERT(samplesLength <= scratchBufferLength);
AUDIO_SAMPLE_BUFFER_MAX_BYTES);
CSFLogDebug( CSFLogDebug(
LOGTAG, "Audio conduit returned buffer of length %u", samplesLength); LOGTAG, "Audio conduit returned buffer of length %u", samplesLength);