Skip to content

Commit

Permalink
Fix zero address handling for EnsGetEthAddr (#15169)
Browse files Browse the repository at this point in the history
  • Loading branch information
supermassive authored Sep 22, 2022
1 parent 1f3bce9 commit 330f5f7
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
7 changes: 7 additions & 0 deletions components/brave_wallet/browser/json_rpc_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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, "");
}

Expand Down
44 changes: 44 additions & 0 deletions components/brave_wallet/browser/json_rpc_service_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<network::DataElementBytes>()
.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,
Expand Down Expand Up @@ -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<JsonRpcService::EnsGetEthAddrCallback> 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;
Expand Down

0 comments on commit 330f5f7

Please sign in to comment.