fix: crash on empty dialog extensions array on Windows (#48640)

This commit is contained in:
Shelley Vohr
2025-10-25 18:14:55 +02:00
committed by GitHub
parent 777b6c70a2
commit eda0a7e749

View File

@@ -44,8 +44,7 @@ void ConvertFilters(const Filters& filters,
std::vector<std::wstring>* buffer,
std::vector<COMDLG_FILTERSPEC>* 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<std::string> 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<std::string> 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);
}