Skip to content

Commit 028168a

Browse files
a-sullyChromium LUCI CQ
authored and
Chromium LUCI CQ
committed
FSA: Restrict suggestedName extensions to 16 characters
Matches the extension length restriction for FilePickerOptions Bug: 1354505 Change-Id: I37d61aed0bcebbdf05d131a33cc0f14b117f04e5 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3841864 Commit-Queue: Daseul Lee <dslee@chromium.org> Reviewed-by: Daseul Lee <dslee@chromium.org> Auto-Submit: Austin Sullivan <asully@chromium.org> Cr-Commit-Position: refs/heads/main@{#1037829}
1 parent 74983e5 commit 028168a

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

content/browser/file_system_access/file_system_chooser.cc

+10-5
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,18 @@
44

55
#include "content/browser/file_system_access/file_system_chooser.h"
66

7-
#include "base/bind.h"
87
#include "base/files/file_path.h"
9-
#include "base/files/file_util.h"
108
#include "base/i18n/file_util_icu.h"
119
#include "base/i18n/rtl.h"
1210
#include "base/metrics/histogram_functions.h"
1311
#include "base/strings/string_util.h"
1412
#include "base/strings/utf_string_conversions.h"
1513
#include "build/build_config.h"
16-
#include "content/browser/file_system_access/file_system_access_directory_handle_impl.h"
1714
#include "content/browser/file_system_access/file_system_access_error.h"
1815
#include "content/public/browser/browser_thread.h"
19-
#include "content/public/browser/child_process_security_policy.h"
2016
#include "content/public/browser/content_browser_client.h"
2117
#include "content/public/browser/web_contents.h"
2218
#include "content/public/common/content_client.h"
23-
#include "net/base/filename_util.h"
2419
#include "net/base/mime_util.h"
2520
#include "ui/gfx/text_elider.h"
2621
#include "ui/shell_dialogs/select_file_policy.h"
@@ -36,6 +31,10 @@ namespace {
3631
// size and underlying platform all influence how many characters will actually
3732
// be visible. As such this can be adjusted as needed.
3833
constexpr int kMaxDescriptionLength = 64;
34+
// The maximum number of unicode code points the extension of a file is
35+
// allowed to be. Any longer extensions will be stripped. This value should be
36+
// kept in sync with the extension length checks in the renderer.
37+
constexpr int kMaxExtensionLength = 16;
3938

4039
std::string TypeToString(ui::SelectFileDialog::Type type) {
4140
switch (type) {
@@ -214,6 +213,12 @@ base::FilePath FileSystemChooser::Options::ResolveSuggestedNameExtension(
214213

215214
auto suggested_extension = suggested_name.Extension();
216215

216+
if (suggested_extension.size() > kMaxExtensionLength) {
217+
// Sanitize extensions longer than 16 characters.
218+
file_types.include_all_files = true;
219+
return suggested_name.RemoveExtension();
220+
}
221+
217222
if (file_types.extensions.empty() || suggested_extension.empty()) {
218223
file_types.include_all_files = true;
219224
return suggested_name;

content/browser/file_system_access/file_system_chooser_browsertest.cc

+6
Original file line numberDiff line numberDiff line change
@@ -1620,6 +1620,12 @@ IN_PROC_BROWSER_TEST_F(FileSystemChooserBrowserTest, SuggestedName) {
16201620
true, "dangerous_extension.scf.png", true});
16211621
name_infos.push_back({"dangerous_extension.url.png", ListValueOf(".png"),
16221622
true, "dangerous_extension.url.png", true});
1623+
// Extensions longer than 16 characters should be stripped.
1624+
name_infos.push_back({"long_extension.len10plus123456",
1625+
ListValueOf(".len10plus123456"), true,
1626+
"long_extension.len10plus123456", true});
1627+
name_infos.push_back({"long_extension.len10plus1234567", ListValueOf(".nope"),
1628+
true, "long_extension", false});
16231629
// Invalid characters should be sanitized.
16241630
name_infos.push_back({R"(inv*l:d\\ch%rבאמת!a<ters🤓.txt)",
16251631
ListValueOf(".txt"), true,

0 commit comments

Comments
 (0)