From 28d940e33ab78f3561070385c5bb784e0016fa3e Mon Sep 17 00:00:00 2001 From: Marcin Oczeretko Date: Mon, 17 Jan 2022 11:41:37 +0000 Subject: [PATCH] Fix NPE in Binder#getTransactionName Bug: 214053959 Test: manual Change-Id: Ie77080d20f638e5e6e0a6ecb255d45bdb12f3c4d --- core/java/android/os/Binder.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index 429450ce8e5e3..80cf2f87f1d6c 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -311,6 +311,7 @@ public class Binder implements IBinder { private final long mObject; private IInterface mOwner; + @Nullable private String mDescriptor; private volatile String[] mTransactionTraceNames = null; private volatile String mSimpleDescriptor = null; @@ -930,8 +931,8 @@ public class Binder implements IBinder { transactionNames[i] = buf.toString(); buf.setLength(0); } - mTransactionTraceNames = transactionNames; mSimpleDescriptor = descriptor; + mTransactionTraceNames = transactionNames; } final int index = transactionCode - FIRST_CALL_TRANSACTION; if (index < 0 || index >= mTransactionTraceNames.length) { @@ -940,13 +941,19 @@ public class Binder implements IBinder { return mTransactionTraceNames[index]; } - private String getSimpleDescriptor() { - final int dot = mDescriptor.lastIndexOf("."); + private @NonNull String getSimpleDescriptor() { + String descriptor = mDescriptor; + if (descriptor == null) { + // Just "Binder" to avoid null checks in transaction name tracing. + return "Binder"; + } + + final int dot = descriptor.lastIndexOf("."); if (dot > 0) { // Strip the package name - return mDescriptor.substring(dot + 1); + return descriptor.substring(dot + 1); } - return mDescriptor; + return descriptor; } /**