net/ftp: Fix control response parsing for a corner cases where the first line of a continuation has 0 length.

BUG=29322
TEST=ftp://sourceware.org works.
Review URL: http://codereview.chromium.org/467032

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33986 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/ftp/ftp_ctrl_response_buffer_unittest.cc b/net/ftp/ftp_ctrl_response_buffer_unittest.cc
index c2aeee2..1477c09 100644
--- a/net/ftp/ftp_ctrl_response_buffer_unittest.cc
+++ b/net/ftp/ftp_ctrl_response_buffer_unittest.cc
@@ -96,6 +96,25 @@
   EXPECT_EQ("LastLine", response.lines[2]);
 }
 
+TEST_F(FtpCtrlResponseBufferTest, MultilineContinuationZeroLength) {
+  // For the corner case from bug 29322.
+  EXPECT_EQ(net::OK, PushDataToBuffer("230-\r\n"));
+  EXPECT_FALSE(buffer_.ResponseAvailable());
+
+  EXPECT_EQ(net::OK, PushDataToBuffer("example.com\r\n"));
+  EXPECT_FALSE(buffer_.ResponseAvailable());
+
+  EXPECT_EQ(net::OK, PushDataToBuffer("230 LastLine\r\n"));
+  EXPECT_TRUE(buffer_.ResponseAvailable());
+
+  net::FtpCtrlResponse response = buffer_.PopResponse();
+  EXPECT_FALSE(buffer_.ResponseAvailable());
+  EXPECT_EQ(230, response.status_code);
+  ASSERT_EQ(2U, response.lines.size());
+  EXPECT_EQ("example.com", response.lines[0]);
+  EXPECT_EQ("LastLine", response.lines[1]);
+}
+
 TEST_F(FtpCtrlResponseBufferTest, SimilarContinuation) {
   EXPECT_EQ(net::OK, PushDataToBuffer("230-FirstLine\r\n"));
   EXPECT_FALSE(buffer_.ResponseAvailable());