From 1e177163d8619613f74ec2d542a7e337620a37d9 Mon Sep 17 00:00:00 2001 From: Anton Paymyshev Date: Thu, 22 Sep 2022 10:25:01 +0700 Subject: [PATCH] Fix zero address handling for EnsGetEthAddr --- .../brave_wallet/browser/json_rpc_service.cc | 7 +++ .../browser/json_rpc_service_unittest.cc | 44 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/components/brave_wallet/browser/json_rpc_service.cc b/components/brave_wallet/browser/json_rpc_service.cc index 9122648be921..1a3646a2c2d1 100644 --- a/components/brave_wallet/browser/json_rpc_service.cc +++ b/components/brave_wallet/browser/json_rpc_service.cc @@ -1417,6 +1417,13 @@ void JsonRpcService::OnEnsGetEthAddr(EnsGetEthAddrCallback callback, return; } + if (EthAddress::FromHex(address).IsZeroAddress()) { + std::move(callback).Run( + "", false, mojom::ProviderError::kInvalidParams, + l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS)); + return; + } + std::move(callback).Run(address, false, mojom::ProviderError::kSuccess, ""); } diff --git a/components/brave_wallet/browser/json_rpc_service_unittest.cc b/components/brave_wallet/browser/json_rpc_service_unittest.cc index 404c6ccdd7db..e22c936d97af 100644 --- a/components/brave_wallet/browser/json_rpc_service_unittest.cc +++ b/components/brave_wallet/browser/json_rpc_service_unittest.cc @@ -488,6 +488,38 @@ class JsonRpcServiceUnitTest : public testing::Test { })); } + void SetENSZeroAddressInterceptor(const std::string& chain_id) { + GURL network_url = AddInfuraProjectId( + GetNetworkURL(prefs(), chain_id, mojom::CoinType::ETH)); + ASSERT_TRUE(network_url.is_valid()); + url_loader_factory_.SetInterceptor(base::BindLambdaForTesting( + [&, network_url](const network::ResourceRequest& request) { + base::StringPiece request_string(request.request_body->elements() + ->at(0) + .As() + .AsStringPiece()); + url_loader_factory_.ClearResponses(); + if (request_string.find(GetFunctionHash("resolver(bytes32)")) != + std::string::npos) { + url_loader_factory_.AddResponse( + network_url.spec(), + "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":" + "\"0x0000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78e" + "baba41\"}"); + } else if (request_string.find(GetFunctionHash("addr(bytes32)")) != + std::string::npos) { + url_loader_factory_.AddResponse( + network_url.spec(), + "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":" + "\"0x0000000000000000000000000000000000000000000000000000000000" + "000000\"}"); + } else { + url_loader_factory_.AddResponse(request.url.spec(), "", + net::HTTP_REQUEST_TIMEOUT); + } + })); + } + void SetTokenMetadataInterceptor( const std::string& interface_id, const std::string& chain_id, @@ -1251,6 +1283,18 @@ TEST_F(JsonRpcServiceUnitTest, EnsGetEthAddr) { base::RunLoop().RunUntilIdle(); } +TEST_F(JsonRpcServiceUnitTest, EnsGetEthAddr_ZeroAddress) { + SetENSZeroAddressInterceptor(mojom::kMainnetChainId); + EXPECT_TRUE(SetNetwork(mojom::kMainnetChainId, mojom::CoinType::ETH)); + + base::MockCallback callback; + EXPECT_CALL(callback, + Run("", false, mojom::ProviderError::kInvalidParams, + l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS))); + json_rpc_service_->EnsGetEthAddr("brantly-test.eth", nullptr, callback.Get()); + base::RunLoop().RunUntilIdle(); +} + TEST_F(JsonRpcServiceUnitTest, AddEthereumChainApproved) { mojom::NetworkInfo chain = GetTestNetworkInfo1("0x111"); bool callback_is_called = false;