diff options
| author | 2021-11-09 05:08:56 +0000 | |
|---|---|---|
| committer | 2021-11-09 05:08:56 +0000 | |
| commit | 32438ace6183b4e69b3f79b81b19d6528f685b49 (patch) | |
| tree | 83e4cfc13d217fbe5610b7a2ecdff961d19c6aa1 | |
| parent | 94f42cee07ad376aaf51d2e7408bfef8665ff253 (diff) | |
| parent | c18a153f34d55726cf07f313c33304d1a214abf0 (diff) | |
Merge "Prevent ClassCastException" into sc-v2-dev
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 |