From a12ba5502c09b56aa6f8e101e6af7f2d12440663 Mon Sep 17 00:00:00 2001 From: dkirovbroadsoft Date: Thu, 30 Jul 2015 20:51:35 -0700 Subject: [PATCH] Added protection for GetCapabilities() failure. On GetCapabilities() failure, caps.cDestinations is left uninitialized. Without a protection the following code runs in a random loop in the worst case up to 0xFFFFFFFF times. for (destId = 0; destId < caps.cDestinations; destId++) { GetDestinationLineInfo(mixId, destId, destLine); BUG=webrtc:4882 Review URL: https://codereview.webrtc.org/1269563002 Cr-Commit-Position: refs/heads/master@{#9663} --- .../modules/audio_device/win/audio_mixer_manager_win.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/webrtc/modules/audio_device/win/audio_mixer_manager_win.cc b/webrtc/modules/audio_device/win/audio_mixer_manager_win.cc index 4d6e7bb9a6..79076d39a7 100644 --- a/webrtc/modules/audio_device/win/audio_mixer_manager_win.cc +++ b/webrtc/modules/audio_device/win/audio_mixer_manager_win.cc @@ -195,7 +195,9 @@ int32_t AudioMixerManager::EnumerateSpeakers() for (mixId = 0; mixId < nDevices; mixId++) { // get capabilities for the specified mixer ID - GetCapabilities(mixId, caps); + if (!GetCapabilities(mixId, caps)) + continue; + WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "[mixerID=%d] %s: ", mixId, WideToUTF8(caps.szPname)); // scan all avaliable destinations for this mixer for (destId = 0; destId < caps.cDestinations; destId++) @@ -280,7 +282,9 @@ int32_t AudioMixerManager::EnumerateMicrophones() for (mixId = 0; mixId < nDevices; mixId++) { // get capabilities for the specified mixer ID - GetCapabilities(mixId, caps); + if (!GetCapabilities(mixId, caps)) + continue; + WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "[mixerID=%d] %s: ", mixId, WideToUTF8(caps.szPname)); // scan all avaliable destinations for this mixer for (destId = 0; destId < caps.cDestinations; destId++)