summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
Diffstat (limited to 'Parser')
-rw-r--r--Parser/lexer/lexer.c4
-rw-r--r--Parser/pegen_errors.c5
2 files changed, 9 insertions, 0 deletions
diff --git a/Parser/lexer/lexer.c b/Parser/lexer/lexer.c
index c7134ab..1a01bb0 100644
--- a/Parser/lexer/lexer.c
+++ b/Parser/lexer/lexer.c
@@ -59,6 +59,10 @@ tok_nextc(struct tok_state *tok)
int rc;
for (;;) {
if (tok->cur != tok->inp) {
+ if ((unsigned int) tok->col_offset >= (unsigned int) INT_MAX) {
+ tok->done = E_COLUMNOVERFLOW;
+ return EOF;
+ }
tok->col_offset++;
return Py_CHARMASK(*tok->cur++); /* Fast path */
}
diff --git a/Parser/pegen_errors.c b/Parser/pegen_errors.c
index 15e99e2..057bf55 100644
--- a/Parser/pegen_errors.c
+++ b/Parser/pegen_errors.c
@@ -68,6 +68,7 @@ _Pypegen_tokenizer_error(Parser *p)
const char *msg = NULL;
PyObject* errtype = PyExc_SyntaxError;
Py_ssize_t col_offset = -1;
+ p->error_indicator = 1;
switch (p->tok->done) {
case E_TOKEN:
msg = "invalid token";
@@ -103,6 +104,10 @@ _Pypegen_tokenizer_error(Parser *p)
msg = "unexpected character after line continuation character";
break;
}
+ case E_COLUMNOVERFLOW:
+ PyErr_SetString(PyExc_OverflowError,
+ "Parser column offset overflow - source line is too big");
+ return -1;
default:
msg = "unknown parsing error";
}