Skip to content

Commit

Permalink
bpo-36878: Only allow text after # type: ignore if first character …
Browse files Browse the repository at this point in the history
…ASCII (GH-13504)

This disallows things like `# type: ignoreé`, which seems wrong.

Also switch to using Py_ISALNUM for the alnum check, for consistency
with other code (and maybe correctness re: locale issues?).


https://bugs.python.org/issue36878
  • Loading branch information
msullivan authored and miss-islington committed May 22, 2019
1 parent 0c2b6a3 commit d8a82e2
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 2 deletions.
1 change: 1 addition & 0 deletions Lib/test/test_type_comments.py
Expand Up @@ -334,6 +334,7 @@ def check_both_ways(source):
check_both_ways("try: # type: int\n pass\nfinally:\n pass\n")
check_both_ways("try:\n pass\nfinally: # type: int\n pass\n")
check_both_ways("pass # type: ignorewhatever\n")
check_both_ways("pass # type: ignoreé\n")

def test_func_type_input(self):

Expand Down
@@ -0,0 +1,2 @@
Only accept text after `# type: ignore` if the first character is ASCII.
This is to disallow things like `# type: ignoreé`.
5 changes: 3 additions & 2 deletions Parser/tokenizer.c
Expand Up @@ -1275,10 +1275,11 @@ tok_get(struct tok_state *tok, char **p_start, char **p_end)
type_start = p;

/* A TYPE_IGNORE is "type: ignore" followed by the end of the token
* or anything non-alphanumeric. */
* or anything ASCII and non-alphanumeric. */
is_type_ignore = (
tok->cur >= ignore_end && memcmp(p, "ignore", 6) == 0
&& !(tok->cur > ignore_end && isalnum(p[6])));
&& !(tok->cur > ignore_end
&& ((unsigned char)ignore_end[0] >= 128 || Py_ISALNUM(ignore_end[0]))));

if (is_type_ignore) {
*p_start = (char *) ignore_end;
Expand Down

0 comments on commit d8a82e2

Please sign in to comment.