[go: up one dir, main page]

M96: FSA: Strip % chars from suggestedName

not be allowed in a suggestedName.

(cherry picked from commit 62e6c0b73c202565da5438add6057fedfa3546ef)

net: :GenerateFileName() does not strip these characters, but they should
Change-Id: I90e413bac1cd66c7ac3b2bff8f8f3a2f71a243b4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3324687
Reviewed-by: Victor Costan <pwnall@chromium.org>
Commit-Queue: Victor Costan <pwnall@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#950335}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3335097
Auto-Submit: Austin Sullivan <asully@chromium.org>
Reviewed-by: Adrian Taylor <adetaylor@chromium.org>
Commit-Queue: Austin Sullivan <asully@chromium.org>
Cr-Commit-Position: refs/branch-heads/4664@{#1297}
Cr-Branched-From: 24dc4ee75e01a29d390d43c9c264372a169273a7-refs/heads/main@{#929512}
diff --git a/content/browser/file_system_access/file_system_access_manager_impl.cc b/content/browser/file_system_access/file_system_access_manager_impl.cc
index b03b7c1..adfcbab 100644
--- a/content/browser/file_system_access/file_system_access_manager_impl.cc
+++ b/content/browser/file_system_access/file_system_access_manager_impl.cc
@@ -509,11 +509,14 @@
           ? options->get_save_file_picker_options()->suggested_name
           : std::string();
 
-  auto suggested_name_path =
-      !suggested_name.empty()
-          ? net::GenerateFileName(GURL(), std::string(), std::string(),
-                                  suggested_name, std::string(), std::string())
-          : base::FilePath();
+  base::FilePath suggested_name_path;
+  if (!suggested_name.empty()) {
+    // `net::GenerateFileName` does not strip "%" characters.
+    base::ReplaceChars(suggested_name, "%", "_", &suggested_name);
+    suggested_name_path =
+        net::GenerateFileName(GURL(), std::string(), std::string(),
+                              suggested_name, std::string(), std::string());
+  }
 
   FileSystemChooser::Options file_system_chooser_options(
       GetSelectFileDialogType(options), GetAndMoveAcceptsTypesInfo(options),
diff --git a/content/browser/file_system_access/file_system_chooser_browsertest.cc b/content/browser/file_system_access/file_system_chooser_browsertest.cc
index 7cf8a088..b5bebd0 100644
--- a/content/browser/file_system_access/file_system_chooser_browsertest.cc
+++ b/content/browser/file_system_access/file_system_chooser_browsertest.cc
@@ -1573,9 +1573,9 @@
                         "dangerous_extension.lnk", false});
 #endif
   // Invalid characters should be sanitized.
-  name_infos.push_back({R"(inv*l:d\\charבאמת!a<ters🤓.txt)",
+  name_infos.push_back({R"(inv*l:d\\ch%rבאמת!a<ters🤓.txt)",
                         ListValueOf(".txt"), true,
-                        R"(inv_l_d__charבאמת!a_ters🤓.txt)", true});
+                        R"(inv_l_d__ch_rבאמת!a_ters🤓.txt)", true});
 
   for (const auto& name_info : name_infos) {
     SCOPED_TRACE(name_info.suggested_name);