From 4f5920c3f58f0afb9cccef9162e57f2e587b04f6 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Fri, 19 Apr 2024 16:00:03 +0800 Subject: [PATCH] Not include user input in regex Check prefix and remove prefix first, to avoid include user input in the regex to fix. Fix: 335136289 Test: manual - on SIMs Test: unit test Change-Id: Iff4dcfc3662c744d00b586d05e64b4f5fe33a0d8 --- .../android/settings/network/SubscriptionUtil.java | 13 +++++++------ .../settings/network/SubscriptionUtilTest.java | 8 ++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java index 56381e263b3..9277417dea4 100644 --- a/src/com/android/settings/network/SubscriptionUtil.java +++ b/src/com/android/settings/network/SubscriptionUtil.java @@ -75,8 +75,9 @@ public class SubscriptionUtil { static final String SUB_ID = "sub_id"; @VisibleForTesting static final String KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME = "unique_subscription_displayName"; - private static final String REGEX_DISPLAY_NAME_PREFIXES = "^"; - private static final String REGEX_DISPLAY_NAME_SUFFIXES = "\\s[0-9]+"; + private static final String REGEX_DISPLAY_NAME_SUFFIX = "\\s[0-9]+"; + private static final Pattern REGEX_DISPLAY_NAME_SUFFIX_PATTERN = + Pattern.compile(REGEX_DISPLAY_NAME_SUFFIX); private static List sAvailableResultsForTesting; private static List sActiveResultsForTesting; @@ -460,12 +461,12 @@ public class SubscriptionUtil { @VisibleForTesting static boolean isValidCachedDisplayName(String cachedDisplayName, String originalName) { - if (TextUtils.isEmpty(cachedDisplayName) || TextUtils.isEmpty(originalName)) { + if (TextUtils.isEmpty(cachedDisplayName) || TextUtils.isEmpty(originalName) + || !cachedDisplayName.startsWith(originalName)) { return false; } - String regex = REGEX_DISPLAY_NAME_PREFIXES + originalName + REGEX_DISPLAY_NAME_SUFFIXES; - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(cachedDisplayName); + String displayNameSuffix = cachedDisplayName.substring(originalName.length()); + Matcher matcher = REGEX_DISPLAY_NAME_SUFFIX_PATTERN.matcher(displayNameSuffix); return matcher.matches(); } diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java index 6df281a5db2..46c281f1267 100644 --- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java +++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java @@ -635,6 +635,14 @@ public class SubscriptionUtilTest { assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isFalse(); } + @Test + public void isValidCachedDisplayName_withBrackets_noCrash() { + String originalName = "originalName("; + String cacheString = "originalName( 1234"; + + assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isTrue(); + } + @Test public void isConnectedToWifi_hasWiFi_returnTrue() { addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);