mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-23 00:01:36 +00:00
add escape_single_quotes=False arg to bytes_to_escaped_str
This commit is contained in:
parent
63f64cd660
commit
4534363671
@ -69,7 +69,7 @@ def escape_control_characters(text, keep_spacing=True):
|
|||||||
return text.translate(trans)
|
return text.translate(trans)
|
||||||
|
|
||||||
|
|
||||||
def bytes_to_escaped_str(data, keep_spacing=False):
|
def bytes_to_escaped_str(data, keep_spacing=False, escape_single_quotes=False):
|
||||||
"""
|
"""
|
||||||
Take bytes and return a safe string that can be displayed to the user.
|
Take bytes and return a safe string that can be displayed to the user.
|
||||||
|
|
||||||
@ -86,6 +86,8 @@ def bytes_to_escaped_str(data, keep_spacing=False):
|
|||||||
# We always insert a double-quote here so that we get a single-quoted string back
|
# 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
|
# https://stackoverflow.com/questions/29019340/why-does-python-use-different-quotes-for-representing-strings-depending-on-their
|
||||||
ret = repr(b'"' + data).lstrip("b")[2:-1]
|
ret = repr(b'"' + data).lstrip("b")[2:-1]
|
||||||
|
if not escape_single_quotes:
|
||||||
|
ret = re.sub(r"(?<!\\)(\\\\)*\\'", lambda m: (m.group(1) or "") + "'", ret)
|
||||||
if keep_spacing:
|
if keep_spacing:
|
||||||
ret = re.sub(
|
ret = re.sub(
|
||||||
r"(?<!\\)(\\\\)*\\([nrt])",
|
r"(?<!\\)(\\\\)*\\([nrt])",
|
||||||
|
@ -136,7 +136,7 @@ class TokValueLiteral(_TokValueLiteral):
|
|||||||
|
|
||||||
def spec(self):
|
def spec(self):
|
||||||
inner = strutils.bytes_to_escaped_str(self.val)
|
inner = strutils.bytes_to_escaped_str(self.val)
|
||||||
inner = inner.replace(r"\'", r"\x27")
|
inner = inner.replace(r"'", r"\x27")
|
||||||
return "'" + inner + "'"
|
return "'" + inner + "'"
|
||||||
|
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ class TokValueNakedLiteral(_TokValueLiteral):
|
|||||||
return e.setParseAction(lambda x: cls(*x))
|
return e.setParseAction(lambda x: cls(*x))
|
||||||
|
|
||||||
def spec(self):
|
def spec(self):
|
||||||
return strutils.bytes_to_escaped_str(self.val)
|
return strutils.bytes_to_escaped_str(self.val, escape_single_quotes=True)
|
||||||
|
|
||||||
|
|
||||||
class TokValueGenerate(Token):
|
class TokValueGenerate(Token):
|
||||||
@ -166,7 +166,7 @@ class TokValueGenerate(Token):
|
|||||||
|
|
||||||
def freeze(self, settings):
|
def freeze(self, settings):
|
||||||
g = self.get_generator(settings)
|
g = self.get_generator(settings)
|
||||||
return TokValueLiteral(strutils.bytes_to_escaped_str(g[:]))
|
return TokValueLiteral(strutils.bytes_to_escaped_str(g[:], escape_single_quotes=True))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def expr(cls):
|
def expr(cls):
|
||||||
@ -578,4 +578,4 @@ class NestedMessage(Token):
|
|||||||
|
|
||||||
def freeze(self, settings):
|
def freeze(self, settings):
|
||||||
f = self.parsed.freeze(settings).spec()
|
f = self.parsed.freeze(settings).spec()
|
||||||
return self.__class__(TokValueLiteral(strutils.bytes_to_escaped_str(f.encode())))
|
return self.__class__(TokValueLiteral(strutils.bytes_to_escaped_str(f.encode(), escape_single_quotes=True)))
|
||||||
|
@ -444,7 +444,7 @@ class Pathoc(tcp.TCPClient):
|
|||||||
finally:
|
finally:
|
||||||
if resp:
|
if resp:
|
||||||
lg("<< %s %s: %s bytes" % (
|
lg("<< %s %s: %s bytes" % (
|
||||||
resp.status_code, strutils.bytes_to_escaped_str(resp.reason.encode()), len(resp.content)
|
resp.status_code, strutils.escape_control_characters(resp.reason) if resp.reason else "", len(resp.content)
|
||||||
))
|
))
|
||||||
if resp.status_code in self.ignorecodes:
|
if resp.status_code in self.ignorecodes:
|
||||||
lg.suppress()
|
lg.suppress()
|
||||||
|
@ -48,9 +48,12 @@ def test_bytes_to_escaped_str():
|
|||||||
assert strutils.bytes_to_escaped_str(b"\b") == r"\x08"
|
assert strutils.bytes_to_escaped_str(b"\b") == r"\x08"
|
||||||
assert strutils.bytes_to_escaped_str(br"&!?=\)") == r"&!?=\\)"
|
assert strutils.bytes_to_escaped_str(br"&!?=\)") == r"&!?=\\)"
|
||||||
assert strutils.bytes_to_escaped_str(b'\xc3\xbc') == r"\xc3\xbc"
|
assert strutils.bytes_to_escaped_str(b'\xc3\xbc') == r"\xc3\xbc"
|
||||||
assert strutils.bytes_to_escaped_str(b"'") == r"\'"
|
assert strutils.bytes_to_escaped_str(b"'") == r"'"
|
||||||
assert strutils.bytes_to_escaped_str(b'"') == r'"'
|
assert strutils.bytes_to_escaped_str(b'"') == r'"'
|
||||||
|
|
||||||
|
assert strutils.bytes_to_escaped_str(b"'", escape_single_quotes=True) == r"\'"
|
||||||
|
assert strutils.bytes_to_escaped_str(b'"', escape_single_quotes=True) == r'"'
|
||||||
|
|
||||||
assert strutils.bytes_to_escaped_str(b"\r\n\t") == "\\r\\n\\t"
|
assert strutils.bytes_to_escaped_str(b"\r\n\t") == "\\r\\n\\t"
|
||||||
assert strutils.bytes_to_escaped_str(b"\r\n\t", True) == "\r\n\t"
|
assert strutils.bytes_to_escaped_str(b"\r\n\t", True) == "\r\n\t"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user