diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/ftp/ftp_network_transaction.cc | 2 | ||||
-rw-r--r-- | net/ftp/ftp_network_transaction_unittest.cc | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc index 651340a..86e19a0 100644 --- a/net/ftp/ftp_network_transaction.cc +++ b/net/ftp/ftp_network_transaction.cc @@ -533,7 +533,7 @@ int FtpNetworkTransaction::DoCtrlResolveHost() { std::string host; int port; - host = request_->url.host(); + host = request_->url.HostNoBrackets(); port = request_->url.EffectiveIntPort(); HostResolver::RequestInfo info(host, port); diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc index 5ed8add..ded0ad8 100644 --- a/net/ftp/ftp_network_transaction_unittest.cc +++ b/net/ftp/ftp_network_transaction_unittest.cc @@ -677,6 +677,21 @@ TEST_F(FtpNetworkTransactionTest, FailedLookup) { EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); } +// Check that when determining the host, the square brackets decorating IPv6 +// literals in URLs are stripped. +TEST_F(FtpNetworkTransactionTest, StripBracketsFromIPv6Literals) { + host_resolver_->rules()->AddSimulatedFailure("[::1]"); + + // We start a transaction that is expected to fail with ERR_INVALID_RESPONSE. + // The important part of this test is to make sure that we don't fail with + // ERR_NAME_NOT_RESOLVED, since that would mean the decorated hostname + // was used. + FtpSocketDataProviderEvilSize ctrl_socket( + "213 99999999999999999999999999999999\r\n", + FtpSocketDataProvider::PRE_QUIT); + ExecuteTransaction(&ctrl_socket, "ftp://[::1]/file", ERR_INVALID_RESPONSE); +} + TEST_F(FtpNetworkTransactionTest, DirectoryTransaction) { FtpSocketDataProviderDirectoryListing ctrl_socket; ExecuteTransaction(&ctrl_socket, "ftp://host", OK); |