mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-19 19:15:26 +00:00
VFS: Escape Control Characters 0-31
Escaping NUL is formal, it's not expected on input.
This commit is contained in:
parent
b3f5d6d85b
commit
801adb0947
1 changed files with 86 additions and 0 deletions
|
@ -246,6 +246,49 @@ std::string vfs::escape(std::string_view path)
|
|||
{
|
||||
switch (char c = path[i])
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
{
|
||||
result += u8"0";
|
||||
result.back() += c;
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 19:
|
||||
case 20:
|
||||
case 21:
|
||||
case 22:
|
||||
case 23:
|
||||
case 24:
|
||||
case 25:
|
||||
case 26:
|
||||
case 27:
|
||||
case 28:
|
||||
case 29:
|
||||
case 30:
|
||||
case 31:
|
||||
{
|
||||
result += u8"A";
|
||||
result.back() += c;
|
||||
result.back() -= 10;
|
||||
break;
|
||||
}
|
||||
case '<':
|
||||
{
|
||||
result += u8"<";
|
||||
|
@ -350,6 +393,49 @@ std::string vfs::unescape(std::string_view path)
|
|||
{
|
||||
switch (path[i + 2])
|
||||
{
|
||||
case char{u8"0"[2]}:
|
||||
case char{u8"1"[2]}:
|
||||
case char{u8"2"[2]}:
|
||||
case char{u8"3"[2]}:
|
||||
case char{u8"4"[2]}:
|
||||
case char{u8"5"[2]}:
|
||||
case char{u8"6"[2]}:
|
||||
case char{u8"7"[2]}:
|
||||
case char{u8"8"[2]}:
|
||||
case char{u8"9"[2]}:
|
||||
{
|
||||
result += path[i + 2];
|
||||
result.back() -= u8"0"[2];
|
||||
continue;
|
||||
}
|
||||
case char{u8"A"[2]}:
|
||||
case char{u8"B"[2]}:
|
||||
case char{u8"C"[2]}:
|
||||
case char{u8"D"[2]}:
|
||||
case char{u8"E"[2]}:
|
||||
case char{u8"F"[2]}:
|
||||
case char{u8"G"[2]}:
|
||||
case char{u8"H"[2]}:
|
||||
case char{u8"I"[2]}:
|
||||
case char{u8"J"[2]}:
|
||||
case char{u8"K"[2]}:
|
||||
case char{u8"L"[2]}:
|
||||
case char{u8"M"[2]}:
|
||||
case char{u8"N"[2]}:
|
||||
case char{u8"O"[2]}:
|
||||
case char{u8"P"[2]}:
|
||||
case char{u8"Q"[2]}:
|
||||
case char{u8"R"[2]}:
|
||||
case char{u8"S"[2]}:
|
||||
case char{u8"T"[2]}:
|
||||
case char{u8"U"[2]}:
|
||||
case char{u8"V"[2]}:
|
||||
{
|
||||
result += path[i + 2];
|
||||
result.back() -= u8"A"[2];
|
||||
result.back() += 10;
|
||||
continue;
|
||||
}
|
||||
case char{u8"!"[2]}:
|
||||
{
|
||||
i += 3;
|
||||
|
|
Loading…
Add table
Reference in a new issue