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}
This commit is contained in:
dkirovbroadsoft 2015-07-30 20:51:35 -07:00 committed by Commit bot
parent 5f5f11cc8b
commit a12ba5502c

View File

@ -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++)