From 388ff2e931cdaad61bb272344752f14a7e5d98f2 Mon Sep 17 00:00:00 2001 From: brave-builds Date: Tue, 23 Jan 2024 09:23:45 +0000 Subject: [PATCH] Uplift of #21615 (squashed) to release --- .../brave_wallet/browser/json_rpc_service.cc | 21 +++++++--- .../brave_wallet/browser/json_rpc_service.h | 6 ++- .../browser/json_rpc_service_unittest.cc | 41 +++++++++++++++++-- 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/components/brave_wallet/browser/json_rpc_service.cc b/components/brave_wallet/browser/json_rpc_service.cc index cea512d17add..6677260441d0 100644 --- a/components/brave_wallet/browser/json_rpc_service.cc +++ b/components/brave_wallet/browser/json_rpc_service.cc @@ -68,9 +68,12 @@ using decentralized_dns::ResolveMethodTypes; // The domain name should not start or end with hyphen (-). // The domain name can be a subdomain. // TLD & TLD-1 must be at least two characters. -constexpr char kDomainPattern[] = +constexpr char kEnsDomainPattern[] = "(?:[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9]\\.)+[A-Za-z]{2,}$"; +// Dot separated alpha-numeric-hyphen strings ending with sol +constexpr char kSnsDomainPattern[] = R"(^(?:[a-z0-9-]+\.)+sol$)"; + // Non empty group of symbols of a-z | 0-9 | hyphen(-). // Then a dot. // Then one of fixed suffixes(should match `supportedUDExtensions` array from @@ -1524,7 +1527,7 @@ void JsonRpcService::SetSnsResolveMethod(mojom::ResolveMethod method) { void JsonRpcService::EnsGetEthAddr(const std::string& domain, EnsGetEthAddrCallback callback) { - if (!IsValidDomain(domain)) { + if (!IsValidEnsDomain(domain)) { std::move(callback).Run( "", false, mojom::ProviderError::kInvalidParams, l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS)); @@ -1595,7 +1598,7 @@ void JsonRpcService::OnEnsGetEthAddrTaskDone( void JsonRpcService::SnsGetSolAddr(const std::string& domain, SnsGetSolAddrCallback callback) { - if (!IsValidDomain(domain)) { + if (!IsValidSnsDomain(domain)) { std::move(callback).Run( "", mojom::SolanaProviderError::kInvalidParams, l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS)); @@ -1648,7 +1651,7 @@ void JsonRpcService::OnSnsGetSolAddrTaskDone( void JsonRpcService::SnsResolveHost(const std::string& domain, SnsResolveHostCallback callback) { - if (!IsValidDomain(domain)) { + if (!IsValidSnsDomain(domain)) { std::move(callback).Run( absl::nullopt, mojom::SolanaProviderError::kInvalidParams, l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS)); @@ -2075,8 +2078,14 @@ void JsonRpcService::OnGetBlockByNumber(GetBlockByNumberCallback callback, } /*static*/ -bool JsonRpcService::IsValidDomain(const std::string& domain) { - static const base::NoDestructor kDomainRegex(kDomainPattern); +bool JsonRpcService::IsValidEnsDomain(const std::string& domain) { + static const base::NoDestructor kDomainRegex(kEnsDomainPattern); + return re2::RE2::FullMatch(domain, *kDomainRegex); +} + +/*static*/ +bool JsonRpcService::IsValidSnsDomain(const std::string& domain) { + static const base::NoDestructor kDomainRegex(kSnsDomainPattern); return re2::RE2::FullMatch(domain, *kDomainRegex); } diff --git a/components/brave_wallet/browser/json_rpc_service.h b/components/brave_wallet/browser/json_rpc_service.h index f28a53a770f4..1a629cef3dee 100644 --- a/components/brave_wallet/browser/json_rpc_service.h +++ b/components/brave_wallet/browser/json_rpc_service.h @@ -617,12 +617,14 @@ class JsonRpcService : public KeyedService, public mojom::JsonRpcService { AddChainCallback callback, APIRequestResult api_request_result); - FRIEND_TEST_ALL_PREFIXES(JsonRpcServiceUnitTest, IsValidDomain); + FRIEND_TEST_ALL_PREFIXES(JsonRpcServiceUnitTest, IsValidEnsDomain); + FRIEND_TEST_ALL_PREFIXES(JsonRpcServiceUnitTest, IsValidSnsDomain); FRIEND_TEST_ALL_PREFIXES(JsonRpcServiceUnitTest, IsValidUnstoppableDomain); FRIEND_TEST_ALL_PREFIXES(JsonRpcServiceUnitTest, Reset); friend class JsonRpcServiceUnitTest; - static bool IsValidDomain(const std::string& domain); + static bool IsValidEnsDomain(const std::string& domain); + static bool IsValidSnsDomain(const std::string& domain); static bool IsValidUnstoppableDomain(const std::string& domain); void OnGetERC721OwnerOf(GetERC721OwnerOfCallback callback, diff --git a/components/brave_wallet/browser/json_rpc_service_unittest.cc b/components/brave_wallet/browser/json_rpc_service_unittest.cc index bcffd670b91a..eb0e3653c32e 100644 --- a/components/brave_wallet/browser/json_rpc_service_unittest.cc +++ b/components/brave_wallet/browser/json_rpc_service_unittest.cc @@ -3609,11 +3609,11 @@ TEST_F(JsonRpcServiceUnitTest, GetWalletAddrInvalidDomain) { } } -TEST_F(JsonRpcServiceUnitTest, IsValidDomain) { +TEST_F(JsonRpcServiceUnitTest, IsValidEnsDomain) { std::vector valid_domains = {"brave.eth", "test.brave.eth", "brave-test.test-dev.eth"}; for (const auto& domain : valid_domains) { - EXPECT_TRUE(JsonRpcService::IsValidDomain(domain)) + EXPECT_TRUE(JsonRpcService::IsValidEnsDomain(domain)) << domain << " should be valid"; } @@ -3621,7 +3621,42 @@ TEST_F(JsonRpcServiceUnitTest, IsValidDomain) { "", ".eth", "-brave.eth", "brave-.eth", "brave.e-th", "b.eth", "brave.e", "-brave.test.eth", "brave-.test.eth"}; for (const auto& domain : invalid_domains) { - EXPECT_FALSE(JsonRpcService::IsValidDomain(domain)) + EXPECT_FALSE(JsonRpcService::IsValidEnsDomain(domain)) + << domain << " should be invalid"; + } +} + +TEST_F(JsonRpcServiceUnitTest, IsValidSnsDomain) { + std::vector valid_domains = { + "brave.sol", // + "test.brave.sol", // + "brave-test.test-dev.sol", // + "b.sol", // + "w.sol", // + "-.sol", // + "-brave.sol", // + "brave-.sol", // + "---.sol", // + "-.-.sol", // + "-brave.test.sol", // + "brave-.test.sol" // + }; + for (const auto& domain : valid_domains) { + EXPECT_TRUE(JsonRpcService::IsValidSnsDomain(domain)) + << domain << " should be valid"; + } + + std::vector invalid_domains = { + "", // + "b.eth", // + ".sol", // + "brave.s-ol", // + "B.sol", // + "brave.s", // + "b.Sol" // + }; + for (const auto& domain : invalid_domains) { + EXPECT_FALSE(JsonRpcService::IsValidSnsDomain(domain)) << domain << " should be invalid"; } }