[+] File name escaping

This commit is contained in:
Hykilpikonna
2022-12-19 01:12:08 -05:00
parent cb6aff290d
commit f6aa847368
+37
View File
@@ -0,0 +1,37 @@
import base64
FILENAME_BLACKLIST = [
# Unix and Windows
"/",
# Windows only
"<", ">", ":", '"', "\\", "|", "?", "*", "\0",
"CON", "PRN", "AUX", "NUL",
"COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
"LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9",
# Just for extra safety
"~"
]
FILENAME_REPLACE = {c: f"%{base64.b64encode(c.encode()).decode().replace('=', '')}" for c in FILENAME_BLACKLIST}
def escape_filename(fn: str) -> str:
fn = fn.replace("%", "[ PeRcEnT EsCaPe owo ]")
for c, r in FILENAME_REPLACE.items():
fn = fn.replace(c, r)
fn = fn.replace("[ PeRcEnT EsCaPe owo ]", "%%")
return fn
def unescape_filename(fn: str) -> str:
fn = fn.replace("%%", "[ PeRcEnT EsCaPe owo ]")
for c, r in FILENAME_REPLACE.items():
fn = fn.replace(r, c)
fn = fn.replace("[ PeRcEnT EsCaPe owo ]", "%")
return fn