Index: net/ftp/ftp_network_transaction_unittest.cc |
diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc |
index 140a37d29892e235dadde532e05d47994bd00e5b..54b0501d4f00b3b9acaea33915c87c6ae1478ed2 100644 |
--- a/net/ftp/ftp_network_transaction_unittest.cc |
+++ b/net/ftp/ftp_network_transaction_unittest.cc |
@@ -202,7 +202,6 @@ class FtpMockControlSocketFileDownload : public FtpMockControlSocket { |
return Verify("MDTM /file\r\n", data, PRE_RETR, |
"213 20070221112533\r\n"); |
case PRE_RETR: |
- // TODO(phajdan.jr): Also test with "150 Accepted Data Connection". |
return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); |
default: |
return FtpMockControlSocket::OnWrite(data); |
@@ -213,6 +212,33 @@ class FtpMockControlSocketFileDownload : public FtpMockControlSocket { |
DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownload); |
}; |
+class FtpMockControlSocketEscaping : public FtpMockControlSocket { |
+ public: |
+ FtpMockControlSocketEscaping() { |
+ } |
+ |
+ virtual MockWriteResult OnWrite(const std::string& data) { |
+ if (InjectFault()) |
+ return MockWriteResult(true, data.length()); |
+ switch (state()) { |
+ case PRE_SIZE: |
+ return Verify("SIZE / !\"#$%y\200\201\r\n", data, PRE_MDTM, |
+ "213 18\r\n"); |
+ case PRE_MDTM: |
+ return Verify("MDTM / !\"#$%y\200\201\r\n", data, PRE_RETR, |
+ "213 20070221112533\r\n"); |
+ case PRE_RETR: |
+ return Verify("RETR / !\"#$%y\200\201\r\n", data, PRE_QUIT, |
+ "200 OK\r\n"); |
+ default: |
+ return FtpMockControlSocket::OnWrite(data); |
+ } |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketEscaping); |
+}; |
+ |
class FtpMockControlSocketFileDownloadAcceptedDataConnection |
: public FtpMockControlSocketFileDownload { |
public: |
@@ -683,6 +709,12 @@ TEST_F(FtpNetworkTransactionTest, EvilRestartPassword) { |
EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); |
} |
+TEST_F(FtpNetworkTransactionTest, Escaping) { |
+ FtpMockControlSocketEscaping ctrl_socket; |
+ ExecuteTransaction(&ctrl_socket, "ftp://host/%20%21%22%23%24%25%79%80%81", |
+ OK); |
+} |
+ |
TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) { |
FtpMockControlSocketDirectoryListing ctrl_socket; |
TransactionFailHelper(&ctrl_socket, |