mirror of https://github.com/python/cpython
bpo-45811: Improve error message when source code contains invisible control characters (GH-29654)
This commit is contained in:
parent
7a1d932528
commit
81f4e116ef
|
@ -1566,6 +1566,9 @@ def func2():
|
|||
for paren in ")]}":
|
||||
self._check_error(paren + "1 + 2", f"unmatched '\\{paren}'")
|
||||
|
||||
def test_invisible_characters(self):
|
||||
self._check_error('print\x17("Hello")', "invalid non-printable character")
|
||||
|
||||
def test_match_call_does_not_raise_syntax_error(self):
|
||||
code = """
|
||||
def match(x):
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Improve the tokenizer errors when encountering invisible control characters
|
||||
in the parser. Patch by Pablo Galindo
|
|
@ -2045,6 +2045,12 @@ tok_get(struct tok_state *tok, const char **p_start, const char **p_end)
|
|||
break;
|
||||
}
|
||||
|
||||
if (!Py_UNICODE_ISPRINTABLE(c)) {
|
||||
char hex[9];
|
||||
(void)PyOS_snprintf(hex, sizeof(hex), "%04X", c);
|
||||
return syntaxerror(tok, "invalid non-printable character U+%s", hex);
|
||||
}
|
||||
|
||||
/* Punctuation character */
|
||||
*p_start = tok->start;
|
||||
*p_end = tok->cur;
|
||||
|
|
Loading…
Reference in New Issue