From ac9365ed64d162631565e40fa5f658d24ccf4c15 Mon Sep 17 00:00:00 2001 From: Artem Titov Date: Wed, 28 Mar 2018 15:21:54 +0200 Subject: [PATCH] Set safe values to prevent possible sigsegv while using AudioTransport, add doc Bug: webrtc:8946 Change-Id: Ica066a05905894fba6ba24e45af46b0d5951b5d5 Reviewed-on: https://webrtc-review.googlesource.com/65040 Commit-Queue: Artem Titov Reviewed-by: Fredrik Solenberg Reviewed-by: Henrik Andreassson Cr-Commit-Position: refs/heads/master@{#22652} --- modules/audio_device/audio_device_data_observer.cc | 5 +++++ modules/audio_device/include/audio_device_defines.h | 1 + modules/audio_device/include/test_audio_device.cc | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/audio_device/audio_device_data_observer.cc b/modules/audio_device/audio_device_data_observer.cc index 5f7259d13f..bcec3d5574 100644 --- a/modules/audio_device/audio_device_data_observer.cc +++ b/modules/audio_device/audio_device_data_observer.cc @@ -71,6 +71,11 @@ class ADMWrapper : public AudioDeviceModule, public AudioTransport { int64_t* elapsed_time_ms, int64_t* ntp_time_ms) override { int32_t res = 0; + // Set out parameters to safe values to be sure not to return corrupted + // data. + nSamplesOut = 0; + *elapsed_time_ms = -1; + *ntp_time_ms = -1; // Request data from audio transport. if (audio_transport_) { res = audio_transport_->NeedMorePlayData( diff --git a/modules/audio_device/include/audio_device_defines.h b/modules/audio_device/include/audio_device_defines.h index bb9a0db859..0495442ebe 100644 --- a/modules/audio_device/include/audio_device_defines.h +++ b/modules/audio_device/include/audio_device_defines.h @@ -45,6 +45,7 @@ class AudioTransport { const bool keyPressed, uint32_t& newMicLevel) = 0; // NOLINT + // Implementation has to setup safe values for all specified out parameters. virtual int32_t NeedMorePlayData(const size_t nSamples, const size_t nBytesPerSample, const size_t nChannels, diff --git a/modules/audio_device/include/test_audio_device.cc b/modules/audio_device/include/test_audio_device.cc index b6748228b5..8ee21601f0 100644 --- a/modules/audio_device/include/test_audio_device.cc +++ b/modules/audio_device/include/test_audio_device.cc @@ -174,8 +174,8 @@ class TestAudioDeviceModuleImpl } if (rendering_) { size_t samples_out = 0; - int64_t elapsed_time_ms = 0; - int64_t ntp_time_ms = 0; + int64_t elapsed_time_ms = -1; + int64_t ntp_time_ms = -1; const int sampling_frequency = renderer_->SamplingFrequency(); audio_callback_->NeedMorePlayData( SamplesPerFrame(sampling_frequency), 2, renderer_->NumChannels(),