From 2fbbef37833531f5760c96511399226fe3329b85 Mon Sep 17 00:00:00 2001 From: lihaizhou Date: Fri, 9 Dec 2022 12:48:43 +0800 Subject: [PATCH] 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: lihaizhou --- .../app/servertransaction/TransactionExecutorHelper.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/java/android/app/servertransaction/TransactionExecutorHelper.java b/core/java/android/app/servertransaction/TransactionExecutorHelper.java index 92f7dee0b0add..cb6aa09cc6dbc 100644 --- a/core/java/android/app/servertransaction/TransactionExecutorHelper.java +++ b/core/java/android/app/servertransaction/TransactionExecutorHelper.java @@ -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;