diff options
author | Benjamin Peterson <benjamin@python.org> | 2012-09-02 18:23:15 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2012-09-02 18:23:15 (GMT) |
commit | 2e2c903700991aa9f7e96d7a7fdaed3628dc7e1e (patch) | |
tree | e83f41d8848df305fc725ed1b5c7ebf6ba55c17e /Python | |
parent | 1c371b255ff15971f2aac1f1ff4a248718744af3 (diff) | |
download | cpython-2e2c903700991aa9f7e96d7a7fdaed3628dc7e1e.zip cpython-2e2c903700991aa9f7e96d7a7fdaed3628dc7e1e.tar.gz cpython-2e2c903700991aa9f7e96d7a7fdaed3628dc7e1e.tar.bz2 |
prevert ast errors from being normalized before ast_error_finish is called (closes #15846)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ast.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Python/ast.c b/Python/ast.c index 6faf5b2..3d0e384 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -92,7 +92,15 @@ ast_error(const node *n, const char *errstr) PyObject *u = Py_BuildValue("zii", errstr, LINENO(n), n->n_col_offset); if (!u) return 0; + /* + * Prevent the error from being chained. PyErr_SetObject will normalize the + * exception in order to chain it. ast_error_finish, however, requires the + * error not to be normalized. + */ + PyObject *save = PyThreadState_GET()->exc_value; + PyThreadState_GET()->exc_value = NULL; PyErr_SetObject(PyExc_SyntaxError, u); + PyThreadState_GET()->exc_value = save; Py_DECREF(u); return 0; } |