From 17e486276dbd406991818e1421d9d755cab8b63a Mon Sep 17 00:00:00 2001 From: "phajdan.jr@chromium.org" Date: Thu, 14 Oct 2010 07:28:08 +0000 Subject: Fix FTP directory listing for ftp.cisco.com. BUG=58963 TEST=net_unittests Review URL: http://codereview.chromium.org/3774002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62515 0039d316-1c4b-4281-b951-d872f2087c98 --- net/ftp/ftp_directory_listing_buffer_unittest.cc | 1 + net/ftp/ftp_directory_listing_parser_ls.cc | 11 +++++++++-- net/ftp/ftp_directory_listing_parser_ls_unittest.cc | 6 ++++++ 3 files changed, 16 insertions(+), 2 deletions(-) (limited to 'net/ftp') diff --git a/net/ftp/ftp_directory_listing_buffer_unittest.cc b/net/ftp/ftp_directory_listing_buffer_unittest.cc index ac62587..86fc6e7 100644 --- a/net/ftp/ftp_directory_listing_buffer_unittest.cc +++ b/net/ftp/ftp_directory_listing_buffer_unittest.cc @@ -40,6 +40,7 @@ TEST(FtpDirectoryListingBufferTest, Parse) { "dir-listing-ls-15", "dir-listing-ls-16", "dir-listing-ls-17", + "dir-listing-ls-18", "dir-listing-mlsd-1", "dir-listing-mlsd-2", "dir-listing-netware-1", diff --git a/net/ftp/ftp_directory_listing_parser_ls.cc b/net/ftp/ftp_directory_listing_parser_ls.cc index b8061a3..9fd2400 100644 --- a/net/ftp/ftp_directory_listing_parser_ls.cc +++ b/net/ftp/ftp_directory_listing_parser_ls.cc @@ -140,8 +140,15 @@ bool FtpDirectoryListingParserLs::ConsumeLine(const string16& line) { entry.type = FtpDirectoryListingEntry::FILE; } - if (!base::StringToInt64(columns[2 + column_offset], &entry.size)) - return false; + if (!base::StringToInt64(columns[2 + column_offset], &entry.size)) { + // Some FTP servers do not separate owning group name from file size, + // like "group1234". We still want to display the file name for that entry, + // but can't really get the size (What if the group is named "group1", + // and the size is in fact 234? We can't distinguish between that + // and "group" with size 1234). Use a dummy value for the size. + // TODO(phajdan.jr): Use a value that means "unknown" instead of 0 bytes. + entry.size = 0; + } if (entry.size < 0) return false; if (entry.type != FtpDirectoryListingEntry::FILE) diff --git a/net/ftp/ftp_directory_listing_parser_ls_unittest.cc b/net/ftp/ftp_directory_listing_parser_ls_unittest.cc index 72450d7..4b36544 100644 --- a/net/ftp/ftp_directory_listing_parser_ls_unittest.cc +++ b/net/ftp/ftp_directory_listing_parser_ls_unittest.cc @@ -75,6 +75,12 @@ TEST_F(FtpDirectoryListingParserLsTest, Good) { { "drwxr-xr-x folder 0 Jul 17 2006 online", net::FtpDirectoryListingEntry::DIRECTORY, "online", -1, 2006, 7, 17, 0, 0 }, + + // Tests for "ls -l" style listing with owning group name + // not separated from file size (http://crbug.com/58963). + { "-rw-r--r-- 1 ftpadmin ftpadmin125435904 Apr 9 2008 .pureftpd-upload", + net::FtpDirectoryListingEntry::FILE, ".pureftpd-upload", 0, + 2008, 4, 9, 0, 0 }, }; for (size_t i = 0; i < arraysize(good_cases); i++) { SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, -- cgit v1.1