summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2021-11-09 05:08:56 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-11-09 05:08:56 +0000
commit32438ace6183b4e69b3f79b81b19d6528f685b49 (patch)
tree83e4cfc13d217fbe5610b7a2ecdff961d19c6aa1
parent94f42cee07ad376aaf51d2e7408bfef8665ff253 (diff)
parentc18a153f34d55726cf07f313c33304d1a214abf0 (diff)
Merge "Prevent ClassCastException" into sc-v2-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt26
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt22
2 files changed, 40 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt
index bf84d77224b1..7e5b26732e00 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestReceiver.kt
@@ -28,6 +28,7 @@ import android.os.UserHandle
import android.service.controls.Control
import android.service.controls.ControlsProviderService
import android.util.Log
+import java.lang.ClassCastException
/**
* Proxy to launch in user 0
@@ -59,20 +60,29 @@ class ControlsRequestReceiver : BroadcastReceiver() {
return
}
- val packageName = intent.getParcelableExtra<ComponentName>(Intent.EXTRA_COMPONENT_NAME)
- ?.packageName
+ val targetComponent = try {
+ intent.getParcelableExtra<ComponentName>(Intent.EXTRA_COMPONENT_NAME)
+ } catch (e: ClassCastException) {
+ Log.e(TAG, "Malformed intent extra ComponentName", e)
+ return
+ }
+
+ val control = try {
+ intent.getParcelableExtra<Control>(ControlsProviderService.EXTRA_CONTROL)
+ } catch (e: ClassCastException) {
+ Log.e(TAG, "Malformed intent extra Control", e)
+ return
+ }
+
+ val packageName = targetComponent?.packageName
if (packageName == null || !isPackageInForeground(context, packageName)) {
return
}
val activityIntent = Intent(context, ControlsRequestDialog::class.java).apply {
- Intent.EXTRA_COMPONENT_NAME.let {
- putExtra(it, intent.getParcelableExtra<ComponentName>(it))
- }
- ControlsProviderService.EXTRA_CONTROL.let {
- putExtra(it, intent.getParcelableExtra<Control>(it))
- }
+ putExtra(Intent.EXTRA_COMPONENT_NAME, targetComponent)
+ putExtra(ControlsProviderService.EXTRA_CONTROL, control)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
}
activityIntent.putExtra(Intent.EXTRA_USER_ID, context.userId)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt
index ee1cc7b1ab71..890b9aec69bf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestReceiverTest.kt
@@ -154,6 +154,28 @@ class ControlsRequestReceiverTest : SysuiTestCase() {
assertNull(wrapper.intent)
}
+ @Test
+ fun testClassCastExceptionComponentName_noCrash() {
+ val badIntent = Intent(ControlsProviderService.ACTION_ADD_CONTROL).apply {
+ putExtra(Intent.EXTRA_COMPONENT_NAME, Intent())
+ putExtra(ControlsProviderService.EXTRA_CONTROL, control)
+ }
+ receiver.onReceive(wrapper, badIntent)
+
+ assertNull(wrapper.intent)
+ }
+
+ @Test
+ fun testClassCastExceptionControl_noCrash() {
+ val badIntent = Intent(ControlsProviderService.ACTION_ADD_CONTROL).apply {
+ putExtra(Intent.EXTRA_COMPONENT_NAME, componentName)
+ putExtra(ControlsProviderService.EXTRA_CONTROL, Intent())
+ }
+ receiver.onReceive(wrapper, badIntent)
+
+ assertNull(wrapper.intent)
+ }
+
class MyWrapper(context: Context) : ContextWrapper(context) {
var intent: Intent? = null