diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 20c823bf2f..08c45b2310 100644 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -1349,9 +1349,12 @@ void CAudioMixerBoard::ApplyNewConClientList ( CVector& vecChanInf for ( size_t iFader = 0; iFader < iNumConnectedClients; iFader++ ) { - // ideally "iChanID" in CChannelInfo would be size_t if it can never be INVALID_INDEX - // as assumed here - iFaderNumber[vecChanInfo[iFader].iChanID] = static_cast ( iFader ); + const int iChanID = vecChanInfo[iFader].iChanID; + + if ( MathUtils::InRange ( iChanID, 0, MAX_NUM_CHANNELS ) ) + { + iFaderNumber[iChanID] = static_cast ( iFader ); + } } // Hide all unused faders and initialize used ones diff --git a/src/util.h b/src/util.h index b083cd42a5..026aa6e768 100644 --- a/src/util.h +++ b/src/util.h @@ -1222,6 +1222,13 @@ class MathUtils return powf ( 10.0f, ( fInValueRange0_1 - 1.0f ) * AUD_MIX_FADER_RANGE_DB / 20.0f ); } } + + // Returns true if value is in [lower, upper) (inclusive lower, exclusive upper). + template + static inline bool InRange ( T value, T lower /* inclusive */, T upper /* exclusive */ ) + { + return value >= lower && value < upper; + } }; /******************************************************************************\