diff options
author | Zackery Spytz <zspytz@gmail.com> | 2018-10-12 08:20:59 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2018-10-12 08:20:59 (GMT) |
commit | a4b48f194a131bad6fe1fcfb1f90ae2029304735 (patch) | |
tree | d7457e7f00286a64688350b3fdbc0375a5048e29 | |
parent | 859c068e52a31e13e2b9bb6a3f861fa8c290cb0e (diff) | |
download | cpython-a4b48f194a131bad6fe1fcfb1f90ae2029304735.zip cpython-a4b48f194a131bad6fe1fcfb1f90ae2029304735.tar.gz cpython-a4b48f194a131bad6fe1fcfb1f90ae2029304735.tar.bz2 |
bpo-34940: Fix the error handling in _check_for_legacy_statements(). (GH-9764)
-rw-r--r-- | Objects/exceptions.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/Objects/exceptions.c b/Objects/exceptions.c index bb50c1c..6aa3d8f 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -2906,7 +2906,7 @@ _check_for_legacy_statements(PySyntaxErrorObject *self, Py_ssize_t start) */ static PyObject *print_prefix = NULL; static PyObject *exec_prefix = NULL; - Py_ssize_t text_len = PyUnicode_GET_LENGTH(self->text); + Py_ssize_t text_len = PyUnicode_GET_LENGTH(self->text), match; int kind = PyUnicode_KIND(self->text); void *data = PyUnicode_DATA(self->text); @@ -2929,9 +2929,12 @@ _check_for_legacy_statements(PySyntaxErrorObject *self, Py_ssize_t start) return -1; } } - if (PyUnicode_Tailmatch(self->text, print_prefix, - start, text_len, -1)) { - + match = PyUnicode_Tailmatch(self->text, print_prefix, + start, text_len, -1); + if (match == -1) { + return -1; + } + if (match) { return _set_legacy_print_statement_msg(self, start); } @@ -2942,10 +2945,17 @@ _check_for_legacy_statements(PySyntaxErrorObject *self, Py_ssize_t start) return -1; } } - if (PyUnicode_Tailmatch(self->text, exec_prefix, - start, text_len, -1)) { - Py_XSETREF(self->msg, - PyUnicode_FromString("Missing parentheses in call to 'exec'")); + match = PyUnicode_Tailmatch(self->text, exec_prefix, start, text_len, -1); + if (match == -1) { + return -1; + } + if (match) { + PyObject *msg = PyUnicode_FromString("Missing parentheses in call " + "to 'exec'"); + if (msg == NULL) { + return -1; + } + Py_XSETREF(self->msg, msg); return 1; } /* Fall back to the default error message */ |