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

Commit 361cb755 authored by Shunkai Yao's avatar Shunkai Yao Committed by Android (Google) Code Review
Browse files

Merge "Validate effect descriptor sp before access" into main

parents 177a33f6 e21b14ad
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);
        }
    }
}