Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e21b14ad authored by Shunkai Yao's avatar Shunkai Yao
Browse files

Validate effect descriptor sp before access

Bug: 290263110
Test: atest AudioServiceHostTest#testVoipAudioInjection --iterations 50
Change-Id: If85e9c32e47e5375b011e37c96d6114ce5c0311b
parent a75611a7
Loading
Loading
Loading
Loading
+18 −12
Original line number Diff line number Diff line
@@ -275,24 +275,30 @@ void EffectDescriptorCollection::moveEffects(audio_session_t session,
                session, dstIo);
        effectsToMove = getOrphanEffectsForSession(session);
    } else {
        ALOGV("%s: moving effects for session %d from io=%d to io=%d", __func__,
                session, srcIo, dstIo);
        sp<AudioInputDescriptor> previousInputDesc = inputs->valueFor(srcIo);
        ALOGV("%s: moving effects for session %d from io=%d to io=%d", __func__, session, srcIo,
              dstIo);
        if (const sp<AudioInputDescriptor>& previousInputDesc = inputs->valueFor(srcIo)) {
            effectsToMove = getEffectsForIo(srcIo);
            for (size_t i = 0; i < effectsToMove.size(); ++i) {
            sp<EffectDescriptor> effect = effectsToMove.valueAt(i);
                const sp<EffectDescriptor>& effect = effectsToMove.valueAt(i);
                effect->mEnabledWhenMoved = effect->mEnabled;
                previousInputDesc->trackEffectEnabled(effect, false);
            }
        } else {
            ALOGW("%s: no effect descriptor for srcIo %d", __func__, srcIo);
        }
    }
    moveEffects(session, srcIo, dstIo, clientInterface);

    if (dstIo != AUDIO_IO_HANDLE_NONE) {
        sp<AudioInputDescriptor> inputDesc = inputs->valueFor(dstIo);
        if (const sp<AudioInputDescriptor>& inputDesc = inputs->valueFor(dstIo)) {
            for (size_t i = 0; i < effectsToMove.size(); ++i) {
            sp<EffectDescriptor> effect = effectsToMove.valueAt(i);
                const sp<EffectDescriptor>& effect = effectsToMove.valueAt(i);
                inputDesc->trackEffectEnabled(effect, effect->mEnabledWhenMoved);
            }
        } else {
            ALOGW("%s: no effect descriptor for dstIo %d", __func__, dstIo);
        }
    }
}