From 15f5e75c2ad06d5dca20a4bd84d628f2458265df Mon Sep 17 00:00:00 2001 From: cyBerta <cyberta@riseup.net> Date: Mon, 13 Jan 2025 23:16:37 +0100 Subject: [PATCH] fix crash when entering invalid invite token --- .../bitmaskclient/base/utils/ConfigHelper.java | 15 +++++++++++++-- .../providersetup/ProviderApiManagerBase.java | 5 +++-- .../base/utils/ConfigHelperTest.java | 9 +++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java index 0e192882c..c7087b672 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java @@ -230,8 +230,19 @@ public class ConfigHelper { public static boolean isDomainName(String url) { return url != null && Patterns.DOMAIN_NAME.matcher(url).matches(); } - public static String getDomainFromMainURL(@NonNull String mainUrl) throws NullPointerException { - return PublicSuffixDatabase.Companion.get().getEffectiveTldPlusOne(mainUrl).replaceFirst("http[s]?://", "").replaceFirst("/.*", ""); + + /** + * Extracts a domain from a given URL + * @param mainUrl URL as String + * @return Domain as String, null if mainUrl is an invalid URL + */ + public static String getDomainFromMainURL(String mainUrl) { + try { + String topLevelDomain = PublicSuffixDatabase.Companion.get().getEffectiveTldPlusOne(mainUrl); + return topLevelDomain.replaceFirst("http[s]?://", "").replaceFirst("/.*", ""); + } catch (NullPointerException | IllegalArgumentException e) { + return null; + } } public static boolean isCalyxOSWithTetheringSupport(Context context) { diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java index 60a41325e..25a9fcce8 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java @@ -136,6 +136,9 @@ public abstract class ProviderApiManagerBase { protected void getPersistedProviderUpdates(Provider provider) { String providerDomain = getDomainFromMainURL(provider.getMainUrl()); + if (providerDomain == null) { + return; + } if (hasUpdatedProviderDetails(providerDomain)) { provider.setCaCert(getPersistedProviderCA(providerDomain)); provider.define(getPersistedProviderDefinition(providerDomain)); @@ -155,8 +158,6 @@ public abstract class ProviderApiManagerBase { } } - - protected String getPersistedPrivateKey(String providerDomain) { return getFromPersistedProvider(PROVIDER_PRIVATE_KEY, providerDomain); } diff --git a/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java b/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java index c63871651..fd862f2b3 100644 --- a/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java @@ -1,6 +1,7 @@ package se.leap.bitmaskclient.base.utils; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import com.tngtech.java.junit.dataprovider.DataProvider; @@ -65,6 +66,14 @@ public class ConfigHelperTest { assertEquals("domain.co.uk", ConfigHelper.getDomainFromMainURL("https://domain.co.uk")); } + @Test + public void testGetDomainFromMainURL_returnNullIfInvalid() { + assertNull(ConfigHelper.getDomainFromMainURL("https://localhost")); + assertNull(ConfigHelper.getDomainFromMainURL("http://localhost")); + assertNull(ConfigHelper.getDomainFromMainURL("invalidrandomstring")); + assertNull(ConfigHelper.getDomainFromMainURL(null)); + } + @Test public void testParseX509CertificatesFromString() throws IOException { ArrayList<X509Certificate> certs = ConfigHelper.parseX509CertificatesFromString(TestSetupHelper.getInputAsString(getClass().getClassLoader().getResourceAsStream("updated_cert.pem"))); -- GitLab