VFS: Escape Control Characters 0-31

Escaping NUL is formal, it's not expected on input.
This commit is contained in:
Nekotekina 2019-08-29 02:41:56 +03:00
parent b3f5d6d85b
commit 801adb0947
1 changed files with 86 additions and 0 deletions

View File

@ -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"";
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"";
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""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
{
result += path[i + 2];
result.back() -= u8""[2];
continue;
}
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
case char{u8""[2]}:
{
result += path[i + 2];
result.back() -= u8""[2];
result.back() += 10;
continue;
}
case char{u8""[2]}:
{
i += 3;