forked from Mirrorlandia_minetest/minetest
Add additional reserved directory names
This commit is contained in:
parent
35bfffb556
commit
00ebedad93
@ -821,9 +821,11 @@ std::wstring translate_string(const std::wstring &s)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static const std::array<std::wstring, 22> disallowed_dir_names = {
|
static const std::array<std::wstring, 30> disallowed_dir_names = {
|
||||||
// Problematic filenames from here:
|
// Problematic filenames from here:
|
||||||
// https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#file-and-directory-names
|
// https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#file-and-directory-names
|
||||||
|
// Plus undocumented values from here:
|
||||||
|
// https://googleprojectzero.blogspot.com/2016/02/the-definitive-guide-on-win32-to-nt.html
|
||||||
L"CON",
|
L"CON",
|
||||||
L"PRN",
|
L"PRN",
|
||||||
L"AUX",
|
L"AUX",
|
||||||
@ -837,6 +839,9 @@ static const std::array<std::wstring, 22> disallowed_dir_names = {
|
|||||||
L"COM7",
|
L"COM7",
|
||||||
L"COM8",
|
L"COM8",
|
||||||
L"COM9",
|
L"COM9",
|
||||||
|
L"COM\u00B2",
|
||||||
|
L"COM\u00B3",
|
||||||
|
L"COM\u00B9",
|
||||||
L"LPT1",
|
L"LPT1",
|
||||||
L"LPT2",
|
L"LPT2",
|
||||||
L"LPT3",
|
L"LPT3",
|
||||||
@ -846,6 +851,11 @@ static const std::array<std::wstring, 22> disallowed_dir_names = {
|
|||||||
L"LPT7",
|
L"LPT7",
|
||||||
L"LPT8",
|
L"LPT8",
|
||||||
L"LPT9",
|
L"LPT9",
|
||||||
|
L"LPT\u00B2",
|
||||||
|
L"LPT\u00B3",
|
||||||
|
L"LPT\u00B9",
|
||||||
|
L"CONIN$",
|
||||||
|
L"CONOUT$",
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -853,6 +863,21 @@ static const std::array<std::wstring, 22> disallowed_dir_names = {
|
|||||||
*/
|
*/
|
||||||
static const std::wstring disallowed_path_chars = L"<>:\"/\\|?*.";
|
static const std::wstring disallowed_path_chars = L"<>:\"/\\|?*.";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param str
|
||||||
|
* @return A copy of \p str with trailing whitespace removed.
|
||||||
|
*/
|
||||||
|
static std::wstring wrtrim(const std::wstring &str)
|
||||||
|
{
|
||||||
|
size_t back = str.size();
|
||||||
|
while (back > 0 && std::isspace(str[back - 1]))
|
||||||
|
--back;
|
||||||
|
|
||||||
|
return str.substr(0, back);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sanitize the name of a new directory. This consists of two stages:
|
* Sanitize the name of a new directory. This consists of two stages:
|
||||||
* 1. Check for 'reserved filenames' that can't be used on some filesystems
|
* 1. Check for 'reserved filenames' that can't be used on some filesystems
|
||||||
@ -863,8 +888,10 @@ std::string sanitizeDirName(const std::string &str, const std::string &optional_
|
|||||||
{
|
{
|
||||||
std::wstring safe_name = utf8_to_wide(str);
|
std::wstring safe_name = utf8_to_wide(str);
|
||||||
|
|
||||||
|
std::wstring dev_name = wrtrim(safe_name);
|
||||||
|
|
||||||
for (std::wstring disallowed_name : disallowed_dir_names) {
|
for (std::wstring disallowed_name : disallowed_dir_names) {
|
||||||
if (str_equal(safe_name, disallowed_name, true)) {
|
if (str_equal(dev_name, disallowed_name, true)) {
|
||||||
safe_name = utf8_to_wide(optional_prefix) + safe_name;
|
safe_name = utf8_to_wide(optional_prefix) + safe_name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user