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
This commit is contained in:
Chaohui Wang
2024-04-19 16:00:03 +08:00
parent 72e6b810bf
commit 4f5920c3f5
2 changed files with 15 additions and 6 deletions

View File

@@ -75,8 +75,9 @@ public class SubscriptionUtil {
static final String SUB_ID = "sub_id"; static final String SUB_ID = "sub_id";
@VisibleForTesting @VisibleForTesting
static final String KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME = "unique_subscription_displayName"; 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_SUFFIX = "\\s[0-9]+";
private static final String REGEX_DISPLAY_NAME_SUFFIXES = "\\s[0-9]+"; private static final Pattern REGEX_DISPLAY_NAME_SUFFIX_PATTERN =
Pattern.compile(REGEX_DISPLAY_NAME_SUFFIX);
private static List<SubscriptionInfo> sAvailableResultsForTesting; private static List<SubscriptionInfo> sAvailableResultsForTesting;
private static List<SubscriptionInfo> sActiveResultsForTesting; private static List<SubscriptionInfo> sActiveResultsForTesting;
@@ -460,12 +461,12 @@ public class SubscriptionUtil {
@VisibleForTesting @VisibleForTesting
static boolean isValidCachedDisplayName(String cachedDisplayName, String originalName) { 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; return false;
} }
String regex = REGEX_DISPLAY_NAME_PREFIXES + originalName + REGEX_DISPLAY_NAME_SUFFIXES; String displayNameSuffix = cachedDisplayName.substring(originalName.length());
Pattern pattern = Pattern.compile(regex); Matcher matcher = REGEX_DISPLAY_NAME_SUFFIX_PATTERN.matcher(displayNameSuffix);
Matcher matcher = pattern.matcher(cachedDisplayName);
return matcher.matches(); return matcher.matches();
} }

View File

@@ -635,6 +635,14 @@ public class SubscriptionUtilTest {
assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isFalse(); 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 @Test
public void isConnectedToWifi_hasWiFi_returnTrue() { public void isConnectedToWifi_hasWiFi_returnTrue() {
addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI); addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);