diff options
-rw-r--r-- | chrome/browser/download/download_manager.cc | 6 | ||||
-rw-r--r-- | chrome/browser/download/download_manager_unittest.cc | 16 |
2 files changed, 21 insertions, 1 deletions
diff --git a/chrome/browser/download/download_manager.cc b/chrome/browser/download/download_manager.cc index 98b0e32..42feb0e 100644 --- a/chrome/browser/download/download_manager.cc +++ b/chrome/browser/download/download_manager.cc @@ -1142,11 +1142,15 @@ void DownloadManager::GenerateExtension( // an executable is hidden in a benign file extension; // E.g. my-cat.jpg becomes my-cat.jpg.js if content type is // application/x-javascript. + // 4. New extension is not ".tar" for .gz files. For misconfigured web + // servers, i.e. bug 5772. FilePath::StringType append_extension; if (net::GetPreferredExtensionForMimeType(mime_type, &append_extension)) { if (append_extension != FILE_PATH_LITERAL("txt") && append_extension != extension && - !IsExecutable(append_extension)) { + !IsExecutable(append_extension) && + (append_extension != FILE_PATH_LITERAL("tar") || + extension != FILE_PATH_LITERAL("gz"))) { extension += FILE_PATH_LITERAL("."); extension += append_extension; } diff --git a/chrome/browser/download/download_manager_unittest.cc b/chrome/browser/download/download_manager_unittest.cc index f942e48..d3b1506 100644 --- a/chrome/browser/download/download_manager_unittest.cc +++ b/chrome/browser/download/download_manager_unittest.cc @@ -313,6 +313,22 @@ const struct { "image/jpeg", L"download.jpg"}, + // For bug 5772 + {"", + "http://www.example.com/foo.tar.gz", + "application/x-tar", + L"foo.tar.gz"}, + + {"", + "http://www.example.com/bar.tar", + "application/x-tar", + L"bar.tar"}, + + {"", + "http://www.example.com/bar.bogus", + "application/x-tar", + L"bar.bogus.tar"}, + // TODO(darin): Add some raw 8-bit Content-Disposition tests. }; |