From c71ab6049f7d6f8d509bdc11f21776ae3eb167f8 Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Mon, 29 Jan 2018 17:56:10 +0100 Subject: [PATCH] Prevent ArrayIndexOutOfBoundsException for some invalid sysui_nav_bar values A user can change sysui_nav_bar via adb. If value of sysui_nav_bar doesn't contain two semicolons, split String array is accessed out of bounds throwing an exception, sending SystemUI in an exception loop. Test: manual Test: adb exec-out settings put secure sysui_nav_bar "home;back" Change-Id: Ia9d74be36d287085650393476029489c9a359a0f --- .../systemui/statusbar/phone/NavigationBarInflaterView.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java index 4e79314bb818e..9f89fe6cb3719 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java @@ -219,6 +219,11 @@ public class NavigationBarInflaterView extends FrameLayout newLayout = getDefaultLayout(); } String[] sets = newLayout.split(GRAVITY_SEPARATOR, 3); + if (sets.length != 3) { + Log.d(TAG, "Invalid layout."); + newLayout = getDefaultLayout(); + sets = newLayout.split(GRAVITY_SEPARATOR, 3); + } String[] start = sets[0].split(BUTTON_SEPARATOR); String[] center = sets[1].split(BUTTON_SEPARATOR); String[] end = sets[2].split(BUTTON_SEPARATOR);