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

Commit 2fbbef37 authored by lihaizhou's avatar lihaizhou
Browse files

Fix potential NPE when ActivityClientRecord is null



From user bugreport and base on Android R code

12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: FATAL EXCEPTION: main
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: Process: com.kuaishou.nebula, PID: 2525
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.app.ActivityThread$ActivityClientRecord.getLifecycleState()' on a null object>
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.servertransaction.TransactionExecutorHelper.getClosestOfStates(TransactionExecutorHelper.java:166)
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.servertransaction.TransactionExecutorHelper.getClosestPreExecutionState(TransactionExecutorHelper.java:144)
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:129)
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2105)

Bug: 262605168
Test: NA

Change-Id: I9613ddd569d6b3d0617b401c73a4f5b92cd95e2e
Signed-off-by: default avatarlihaizhou <lihaizhou@coolpad.com>
parent 140a69e9
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.app.ActivityThread.ActivityClientRecord;
import android.app.ClientTransactionHandler;
import android.os.IBinder;
import android.util.IntArray;
import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;

@@ -43,6 +44,7 @@ import java.util.List;
 * @hide
 */
public class TransactionExecutorHelper {
    private static final String TAG = TransactionExecutorHelper.class.getSimpleName();
    // A penalty applied to path with destruction when looking for the shortest one.
    private static final int DESTRUCTION_PENALTY = 10;

@@ -162,6 +164,11 @@ public class TransactionExecutorHelper {
        if (finalStates == null || finalStates.length == 0) {
            return UNDEFINED;
        }
        if (r == null) {
            // Early return because the ActivityClientRecord hasn't been created or cannot be found.
            Log.w(TAG, "ActivityClientRecord was null");
            return UNDEFINED;
        }

        final int currentState = r.getLifecycleState();
        int closestState = UNDEFINED;