diff options
Diffstat (limited to 'net/ftp')
-rw-r--r-- | net/ftp/ftp_network_transaction.cc | 2 | ||||
-rw-r--r-- | net/ftp/ftp_network_transaction_unittest.cc | 27 |
2 files changed, 28 insertions, 1 deletions
diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc index e3b2709..8bb35fc 100644 --- a/net/ftp/ftp_network_transaction.cc +++ b/net/ftp/ftp_network_transaction.cc @@ -196,7 +196,7 @@ int FtpNetworkTransaction::ProcessCtrlResponse() { break; default: // Multiple responses for other commands are invalid. - return ERR_INVALID_RESPONSE; + return Stop(ERR_INVALID_RESPONSE); } } diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc index cc9c1bb..a7ea82c 100644 --- a/net/ftp/ftp_network_transaction_unittest.cc +++ b/net/ftp/ftp_network_transaction_unittest.cc @@ -232,6 +232,29 @@ class FtpMockControlSocketFileDownloadTransferStarting DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownloadTransferStarting); }; +class FtpMockControlSocketFileDownloadInvalidResponse + : public FtpMockControlSocketFileDownload { + public: + FtpMockControlSocketFileDownloadInvalidResponse() { + } + + virtual MockWriteResult OnWrite(const std::string& data) { + if (InjectFault()) + return MockWriteResult(true, data.length()); + switch (state()) { + case PRE_SIZE: + return Verify("SIZE /file\r\n", data, PRE_QUIT, + "500 Evil Response\r\n" + "500 More Evil\r\n"); + default: + return FtpMockControlSocketFileDownload::OnWrite(data); + } + } + + private: + DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownloadInvalidResponse); +}; + class FtpMockControlSocketFileDownloadRetrFail : public FtpMockControlSocketFileDownload { public: @@ -385,6 +408,10 @@ TEST_F(FtpNetworkTransactionTest, DownloadTransactionTransferStarting) { ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); } +TEST_F(FtpNetworkTransactionTest, DownloadTransactionInvalidResponse) { + FtpMockControlSocketFileDownloadInvalidResponse ctrl_socket; + ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE); +} TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) { FtpMockControlSocketDirectoryListing ctrl_socket; |