Index: net/base/filename_util_unsafe.cc |
diff --git a/net/base/filename_util_unsafe.cc b/net/base/filename_util_unsafe.cc |
index 12e80dcf32d5f701b5525b413266451e9e662d36..18143838055e26e21bcbba93612c287f3db31055 100644 |
--- a/net/base/filename_util_unsafe.cc |
+++ b/net/base/filename_util_unsafe.cc |
@@ -6,6 +6,7 @@ |
#include "base/bind.h" |
#include "base/strings/string_util.h" |
+#include "net/base/filename_util.h" |
#include "net/base/filename_util_internal.h" |
namespace { |
@@ -18,12 +19,13 @@ const base::FilePath::CharType illegal_characters[] = |
FILE_PATH_LITERAL("\"*/:<>?\\\\|\001\002\003\004\005\006\007\010\011\012") |
FILE_PATH_LITERAL("\013\014\015\016\017\020\021\022\023\024\025\025\027"); |
-void ReplaceIllegalCharactersInPath(base::FilePath::StringType* file_name, |
+void ReplaceIllegalCharactersInPath(base::FilePath* file_name, |
char replace_char) { |
- base::ReplaceChars(*file_name, |
- illegal_characters, |
+ base::FilePath::StringType filename_string = file_name->value(); |
+ base::ReplaceChars(filename_string, illegal_characters, |
base::FilePath::StringType(1, replace_char), |
- file_name); |
+ &filename_string); |
+ *file_name = base::FilePath(filename_string); |
} |
} // namespace |
@@ -37,15 +39,14 @@ base::FilePath::StringType GenerateFileExtensionUnsafe( |
const std::string& suggested_name, |
const std::string& mime_type, |
const std::string& default_file_name) { |
- base::FilePath filepath = |
- GenerateFileNameImpl(url, |
- content_disposition, |
- referrer_charset, |
- suggested_name, |
- mime_type, |
- default_file_name, |
- base::Bind(&ReplaceIllegalCharactersInPath)); |
- return filepath.Extension(); |
+ ExtensionGenerationOption extension_option = EXTENSION_OPTION_KEEP_EXISTING; |
+ std::string unsafe_filename = SelectUnsafeDownloadFilename( |
+ url, content_disposition, referrer_charset, suggested_name, mime_type, |
+ default_file_name, &extension_option); |
+ base::FilePath path = base::FilePath::FromUTF8Unsafe(unsafe_filename); |
+ ReplaceIllegalCharactersInPath(&path, kReplacement); |
+ EnsureSafeFilenameInternal(mime_type, extension_option, &path); |
+ return path.Extension(); |
} |
} // namespace net |