summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2017-10-31 00:46:34 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2017-10-31 00:46:34 (GMT)
commit690c36f2f1085145d364a89bfed5944dd2470308 (patch)
treedb583db6fa71f47ac466224a6b36d48396b0aeed /Parser
parent2702380870b63ebe0161dfa29a2d0a3de02401b4 (diff)
downloadcpython-690c36f2f1085145d364a89bfed5944dd2470308.zip
cpython-690c36f2f1085145d364a89bfed5944dd2470308.tar.gz
cpython-690c36f2f1085145d364a89bfed5944dd2470308.tar.bz2
[3.6] bpo-31852: Fix segfault caused by using the async soft keyword (GH-4122)
Diffstat (limited to 'Parser')
-rw-r--r--Parser/tokenizer.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index ff65f2a..ab72f61 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -1563,6 +1563,9 @@ tok_get(struct tok_state *tok, char **p_start, char **p_end)
/* The current token is 'async'.
Look ahead one token.*/
+ int async_def_prev = tok->async_def;
+ tok->async_def = 2;
+
struct tok_state ahead_tok;
char *ahead_tok_start = NULL, *ahead_tok_end = NULL;
int ahead_tok_kind;
@@ -1581,6 +1584,9 @@ tok_get(struct tok_state *tok, char **p_start, char **p_end)
tok->async_def = 1;
return ASYNC;
}
+ else{
+ tok->async_def = async_def_prev;
+ }
}
}
@@ -1844,6 +1850,10 @@ tok_get(struct tok_state *tok, char **p_start, char **p_end)
/* Line continuation */
if (c == '\\') {
c = tok_nextc(tok);
+ if (tok->async_def == 2) {
+ tok->done = E_SYNTAX;
+ return ERRORTOKEN;
+ }
if (c != '\n') {
tok->done = E_LINECONT;
tok->cur = tok->inp;