parent
53d1e0d5df
commit
8c14c6fac8
1 changed files with 17 additions and 2 deletions
19
paranoia.py
19
paranoia.py
|
|
@ -2,6 +2,12 @@
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
ENABLE_HARDENING = True
|
ENABLE_HARDENING = True
|
||||||
|
WHITELISTED_NON_PRINTABLE_CHARS = {
|
||||||
|
"\n", # newline
|
||||||
|
"\r", # carriage return
|
||||||
|
"\t", # tab
|
||||||
|
"\xa0", # non-breaking space ( )
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def panic(reason: str):
|
def panic(reason: str):
|
||||||
|
|
@ -17,8 +23,17 @@ def assert_printable(v: str):
|
||||||
return
|
return
|
||||||
if not isinstance(v, str):
|
if not isinstance(v, str):
|
||||||
panic("not a string " + str(v))
|
panic("not a string " + str(v))
|
||||||
if not v.isprintable():
|
for ch in v:
|
||||||
panic("string contains non-printable characters")
|
# check if printable
|
||||||
|
if ch.isprintable():
|
||||||
|
continue
|
||||||
|
|
||||||
|
# check if whitelisted non-printable
|
||||||
|
if ch in WHITELISTED_NON_PRINTABLE_CHARS:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Anything else is rejected
|
||||||
|
panic(f"string contains non-printable character: (0x{ord(ch):04X})")
|
||||||
|
|
||||||
|
|
||||||
# Check if number is valid int and not NaN
|
# Check if number is valid int and not NaN
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue