From a0be2f521d4d2937777a3d5f22491112f1b8eefb Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Mon, 27 Oct 2025 09:17:27 +0100 Subject: [PATCH] fix: crash on empty dialog extensions array on Windows (#48660) Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr --- shell/browser/ui/file_dialog_win.cc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/shell/browser/ui/file_dialog_win.cc b/shell/browser/ui/file_dialog_win.cc index 5ded77f646..9a9b218644 100644 --- a/shell/browser/ui/file_dialog_win.cc +++ b/shell/browser/ui/file_dialog_win.cc @@ -44,8 +44,7 @@ void ConvertFilters(const Filters& filters, std::vector* buffer, std::vector* filterspec) { if (filters.empty()) { - COMDLG_FILTERSPEC spec = {L"All Files (*.*)", L"*.*"}; - filterspec->push_back(spec); + filterspec->push_back({L"All Files (*.*)", L"*.*"}); return; } @@ -55,11 +54,16 @@ void ConvertFilters(const Filters& filters, buffer->push_back(base::UTF8ToWide(filter.first)); spec.pszName = buffer->back().c_str(); - std::vector extensions(filter.second); - for (std::string& extension : extensions) - extension.insert(0, "*."); - buffer->push_back(base::UTF8ToWide(base::JoinString(extensions, ";"))); - spec.pszSpec = buffer->back().c_str(); + if (filter.second.empty()) { + buffer->push_back(L"*.*"); + spec.pszSpec = buffer->back().c_str(); + } else { + std::vector extensions(filter.second); + for (std::string& extension : extensions) + extension.insert(0, "*."); + buffer->push_back(base::UTF8ToWide(base::JoinString(extensions, ";"))); + spec.pszSpec = buffer->back().c_str(); + } filterspec->push_back(spec); }