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

Commit 8b973fb8 authored by Atneya Nair's avatar Atneya Nair
Browse files

Fix potential NPE in STHelper

We may get stale callbacks for unloaded models, so we should validate
the recognition token after checking the validity of the model data.

Fixes: 281342889
Bug: 281139493
Test: SoundTriggerManagerTest
Change-Id: I77ffea29f43ebf75bcaaaa3332645e71a8c11a36
parent 34a070a6
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -789,15 +789,15 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener {
            return;
        }
        ModelData model = getModelDataForLocked(event.soundModelHandle);
        if (!Objects.equals(event.getToken(), model.getToken())) {
            // Stale event, do nothing
            return;
        }
        if (model == null || !model.isGenericModel()) {
            Slog.w(TAG, "Generic recognition event: Model does not exist for handle: "
                    + event.soundModelHandle);
            return;
        }
        if (!Objects.equals(event.getToken(), model.getToken())) {
            // Stale event, do nothing
            return;
        }

        IRecognitionStatusCallback callback = model.getCallback();
        if (callback == null) {
@@ -875,11 +875,11 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener {
        Slog.w(TAG, "Recognition aborted");
        MetricsLogger.count(mContext, "sth_recognition_aborted", 1);
        ModelData modelData = getModelDataForLocked(event.soundModelHandle);
        if (modelData != null && modelData.isModelStarted()) {
            if (!Objects.equals(event.getToken(), modelData.getToken())) {
                // Stale event, do nothing
                return;
            }
        if (modelData != null && modelData.isModelStarted()) {
            modelData.setStopped();
            try {
                IRecognitionStatusCallback callback = modelData.getCallback();
@@ -916,16 +916,15 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener {
        MetricsLogger.count(mContext, "sth_keyphrase_recognition_event", 1);
        int keyphraseId = getKeyphraseIdFromEvent(event);
        ModelData modelData = getKeyphraseModelDataLocked(keyphraseId);
        if (!Objects.equals(event.getToken(), modelData.getToken())) {
            // Stale event, do nothing
            return;
        }

        if (modelData == null || !modelData.isKeyphraseModel()) {
            Slog.e(TAG, "Keyphase model data does not exist for ID:" + keyphraseId);
            return;
        }

        if (!Objects.equals(event.getToken(), modelData.getToken())) {
            // Stale event, do nothing
            return;
        }
        if (modelData.getCallback() == null) {
            Slog.w(TAG, "Received onRecognition event without callback for keyphrase model.");
            return;