mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-26 18:18:25 +00:00
bytes_to_escaped_str: always escape single quotes
This commit is contained in:
parent
7a8da48a30
commit
d3477e27fa
@ -425,6 +425,10 @@ def safe_subn(pattern, repl, target, *args, **kwargs):
|
||||
def bytes_to_escaped_str(data):
|
||||
"""
|
||||
Take bytes and return a safe string that can be displayed to the user.
|
||||
|
||||
Single quotes are always escaped, double quotes are never escaped:
|
||||
"'" + bytes_to_escaped_str(...) + "'"
|
||||
gives a valid Python string.
|
||||
"""
|
||||
# TODO: We may want to support multi-byte characters without escaping them.
|
||||
# One way to do would be calling .decode("utf8", "backslashreplace") first
|
||||
@ -432,7 +436,9 @@ def bytes_to_escaped_str(data):
|
||||
|
||||
if not isinstance(data, bytes):
|
||||
raise ValueError("data must be bytes")
|
||||
return repr(data).lstrip("b")[1:-1]
|
||||
# We always insert a double-quote here so that we get a single-quoted string back
|
||||
# https://stackoverflow.com/questions/29019340/why-does-python-use-different-quotes-for-representing-strings-depending-on-their
|
||||
return repr('"' + data).lstrip("b")[2:-1]
|
||||
|
||||
|
||||
def escaped_str_to_bytes(data):
|
||||
|
@ -178,6 +178,8 @@ def test_bytes_to_escaped_str():
|
||||
assert utils.bytes_to_escaped_str(b"\b") == r"\x08"
|
||||
assert utils.bytes_to_escaped_str(br"&!?=\)") == r"&!?=\\)"
|
||||
assert utils.bytes_to_escaped_str(b'\xc3\xbc') == r"\xc3\xbc"
|
||||
assert utils.bytes_to_escaped_str(b"'") == r"\'"
|
||||
assert utils.bytes_to_escaped_str(b'"') == r'"'
|
||||
|
||||
|
||||
def test_escaped_str_to_bytes():
|
||||
|
@ -67,7 +67,7 @@ class TestTokValueLiteral:
|
||||
|
||||
def test_roundtrip(self):
|
||||
self.roundtrip("'")
|
||||
self.roundtrip('\'')
|
||||
self.roundtrip(r"\'")
|
||||
self.roundtrip("a")
|
||||
self.roundtrip("\"")
|
||||
# self.roundtrip("\\")
|
||||
|
Loading…
Reference in New Issue
Block a user