Skip to content

Commit 801adb0

Browse files
committed
VFS: Escape Control Characters 0-31
Escaping NUL is formal, it's not expected on input.
1 parent b3f5d6d commit 801adb0

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

rpcs3/Emu/VFS.cpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,49 @@ std::string vfs::escape(std::string_view path)
246246
{
247247
switch (char c = path[i])
248248
{
249+
case 0:
250+
case 1:
251+
case 2:
252+
case 3:
253+
case 4:
254+
case 5:
255+
case 6:
256+
case 7:
257+
case 8:
258+
case 9:
259+
{
260+
result += u8"";
261+
result.back() += c;
262+
break;
263+
}
264+
case 10:
265+
case 11:
266+
case 12:
267+
case 13:
268+
case 14:
269+
case 15:
270+
case 16:
271+
case 17:
272+
case 18:
273+
case 19:
274+
case 20:
275+
case 21:
276+
case 22:
277+
case 23:
278+
case 24:
279+
case 25:
280+
case 26:
281+
case 27:
282+
case 28:
283+
case 29:
284+
case 30:
285+
case 31:
286+
{
287+
result += u8"";
288+
result.back() += c;
289+
result.back() -= 10;
290+
break;
291+
}
249292
case '<':
250293
{
251294
result += u8"";
@@ -350,6 +393,49 @@ std::string vfs::unescape(std::string_view path)
350393
{
351394
switch (path[i + 2])
352395
{
396+
case char{u8""[2]}:
397+
case char{u8""[2]}:
398+
case char{u8""[2]}:
399+
case char{u8""[2]}:
400+
case char{u8""[2]}:
401+
case char{u8""[2]}:
402+
case char{u8""[2]}:
403+
case char{u8""[2]}:
404+
case char{u8""[2]}:
405+
case char{u8""[2]}:
406+
{
407+
result += path[i + 2];
408+
result.back() -= u8""[2];
409+
continue;
410+
}
411+
case char{u8""[2]}:
412+
case char{u8""[2]}:
413+
case char{u8""[2]}:
414+
case char{u8""[2]}:
415+
case char{u8""[2]}:
416+
case char{u8""[2]}:
417+
case char{u8""[2]}:
418+
case char{u8""[2]}:
419+
case char{u8""[2]}:
420+
case char{u8""[2]}:
421+
case char{u8""[2]}:
422+
case char{u8""[2]}:
423+
case char{u8""[2]}:
424+
case char{u8""[2]}:
425+
case char{u8""[2]}:
426+
case char{u8""[2]}:
427+
case char{u8""[2]}:
428+
case char{u8""[2]}:
429+
case char{u8""[2]}:
430+
case char{u8""[2]}:
431+
case char{u8""[2]}:
432+
case char{u8""[2]}:
433+
{
434+
result += path[i + 2];
435+
result.back() -= u8""[2];
436+
result.back() += 10;
437+
continue;
438+
}
353439
case char{u8""[2]}:
354440
{
355441
i += 3;

0 commit comments

Comments
 (0)