summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/download/download_manager.cc6
-rw-r--r--chrome/browser/download/download_manager_unittest.cc16
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.
};