summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZackery Spytz <zspytz@gmail.com>2018-10-12 08:20:59 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2018-10-12 08:20:59 (GMT)
commita4b48f194a131bad6fe1fcfb1f90ae2029304735 (patch)
treed7457e7f00286a64688350b3fdbc0375a5048e29
parent859c068e52a31e13e2b9bb6a3f861fa8c290cb0e (diff)
downloadcpython-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.c26
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 */