aboutsummaryrefslogtreecommitdiff
path: root/autofill-parser/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'autofill-parser/src/main/java')
-rw-r--r--autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/PublicSuffixListCache.kt19
-rw-r--r--autofill-parser/src/main/java/mozilla/components/lib/publicsuffixlist/PublicSuffixList.kt4
2 files changed, 16 insertions, 7 deletions
diff --git a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/PublicSuffixListCache.kt b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/PublicSuffixListCache.kt
index be3cbe66..2a35e8c7 100644
--- a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/PublicSuffixListCache.kt
+++ b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/PublicSuffixListCache.kt
@@ -5,6 +5,8 @@
package com.github.androidpasswordstore.autofillparser
import android.content.Context
+import android.net.InetAddresses
+import android.os.Build
import android.util.Patterns
import kotlinx.coroutines.runBlocking
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
@@ -17,7 +19,7 @@ private object PublicSuffixListCache {
if (!::publicSuffixList.isInitialized) {
publicSuffixList = PublicSuffixList(context)
// Trigger loading the actual public suffix list, but don't block.
- @Suppress("DeferredResultUnused") publicSuffixList.prefetch()
+ @Suppress("DeferredResultUnused") publicSuffixList.prefetchAsync()
}
return publicSuffixList
}
@@ -43,15 +45,21 @@ internal fun getPublicSuffixPlusOne(
// We do not check whether the domain actually exists (actually, not even whether its TLD
// exists). As long as we restrict ourselves to syntactically valid domain names,
// getPublicSuffixPlusOne will return non-colliding results.
- if (!Patterns.DOMAIN_NAME.matcher(domain).matches() ||
- Patterns.IP_ADDRESS.matcher(domain).matches()
- ) {
+ if (!Patterns.DOMAIN_NAME.matcher(domain).matches() || isNumericAddress(domain)) {
domain
} else {
getCanonicalSuffix(context, domain, customSuffixes)
}
}
+private fun isNumericAddress(domain: String): Boolean {
+ return if (Build.VERSION.SDK_INT >= 29) {
+ InetAddresses.isNumericAddress(domain)
+ } else {
+ @Suppress("DEPRECATION") Patterns.IP_ADDRESS.matcher(domain).matches()
+ }
+}
+
/**
* Returns:
* - [domain], if [domain] equals [suffix];
@@ -72,7 +80,8 @@ private suspend fun getCanonicalSuffix(
customSuffixes: Sequence<String>
): String {
val publicSuffixList = PublicSuffixListCache.getOrCachePublicSuffixList(context)
- val publicSuffixPlusOne = publicSuffixList.getPublicSuffixPlusOne(domain).await() ?: return domain
+ val publicSuffixPlusOne =
+ publicSuffixList.getPublicSuffixPlusOneAsync(domain).await() ?: return domain
var longestSuffix = publicSuffixPlusOne
for (customSuffix in customSuffixes) {
val suffixPlusUpToOne = getSuffixPlusUpToOne(domain, customSuffix) ?: continue
diff --git a/autofill-parser/src/main/java/mozilla/components/lib/publicsuffixlist/PublicSuffixList.kt b/autofill-parser/src/main/java/mozilla/components/lib/publicsuffixlist/PublicSuffixList.kt
index 6f8c6d80..cdf9d8de 100644
--- a/autofill-parser/src/main/java/mozilla/components/lib/publicsuffixlist/PublicSuffixList.kt
+++ b/autofill-parser/src/main/java/mozilla/components/lib/publicsuffixlist/PublicSuffixList.kt
@@ -38,7 +38,7 @@ internal class PublicSuffixList(
}
/** Prefetch the public suffix list from disk so that it is available in memory. */
- fun prefetch(): Deferred<Unit> = scope.async { data.run { Unit } }
+ fun prefetchAsync(): Deferred<Unit> = scope.async { data.run {} }
/**
* Returns the public suffix and one more level; known as the registrable domain. Returns `null`
@@ -55,7 +55,7 @@ internal class PublicSuffixList(
* unexpected values are passed (e.g., a full URL, a domain with a trailing '/', etc) this may
* return an incorrect result.
*/
- fun getPublicSuffixPlusOne(domain: String): Deferred<String?> =
+ fun getPublicSuffixPlusOneAsync(domain: String): Deferred<String?> =
scope.async {
when (val offset = data.getPublicSuffixOffset(domain)) {
is PublicSuffixOffset.Offset ->