mirror of https://github.com/python/cpython
SyntaxError__init__(): Be a little more robust when picking apart the
location information for the SyntaxError -- do not do more than we need to, stopping as soon as an exception has been raised.
This commit is contained in:
parent
9c98a428ef
commit
9da7f3b4f4
|
@ -702,29 +702,35 @@ SyntaxError__init__(PyObject *self, PyObject *args)
|
|||
}
|
||||
if (lenargs == 2) {
|
||||
PyObject *info = PySequence_GetItem(args, 1);
|
||||
PyObject *filename, *lineno, *offset, *text;
|
||||
PyObject *filename = NULL, *lineno = NULL;
|
||||
PyObject *offset = NULL, *text = NULL;
|
||||
int status = 1;
|
||||
|
||||
if (!info)
|
||||
goto finally;
|
||||
|
||||
filename = PySequence_GetItem(info, 0);
|
||||
if (filename != NULL) {
|
||||
lineno = PySequence_GetItem(info, 1);
|
||||
if (lineno != NULL) {
|
||||
offset = PySequence_GetItem(info, 2);
|
||||
if (offset != NULL) {
|
||||
text = PySequence_GetItem(info, 3);
|
||||
|
||||
Py_DECREF(info);
|
||||
|
||||
if (filename && lineno && offset && text) {
|
||||
status = PyObject_SetAttrString(self, "filename", filename) ||
|
||||
PyObject_SetAttrString(self, "lineno", lineno) ||
|
||||
PyObject_SetAttrString(self, "offset", offset) ||
|
||||
PyObject_SetAttrString(self, "text", text);
|
||||
if (text != NULL) {
|
||||
status =
|
||||
PyObject_SetAttrString(self, "filename", filename)
|
||||
|| PyObject_SetAttrString(self, "lineno", lineno)
|
||||
|| PyObject_SetAttrString(self, "offset", offset)
|
||||
|| PyObject_SetAttrString(self, "text", text);
|
||||
Py_DECREF(text);
|
||||
}
|
||||
Py_XDECREF(filename);
|
||||
Py_XDECREF(lineno);
|
||||
Py_XDECREF(offset);
|
||||
Py_XDECREF(text);
|
||||
Py_DECREF(offset);
|
||||
}
|
||||
Py_DECREF(lineno);
|
||||
}
|
||||
Py_DECREF(filename);
|
||||
}
|
||||
Py_DECREF(info);
|
||||
|
||||
if (status)
|
||||
goto finally;
|
||||
|
|
Loading…
Reference in New Issue