diff options
author | Fred Drake <fdrake@acm.org> | 2001-02-28 21:52:10 +0000 |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2001-02-28 21:52:10 +0000 |
commit | 5bff11964d68171e7cf5d636922a254e66951349 (patch) | |
tree | 9a91fb84850fa9d6af09a4b18c05cde03544fb5e /Python/exceptions.c | |
parent | db6bed2c84494162559fceaf2302e6183d896d96 (diff) | |
download | cpython-5bff11964d68171e7cf5d636922a254e66951349.tar.gz |
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.
Diffstat (limited to 'Python/exceptions.c')
-rw-r--r-- | Python/exceptions.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/Python/exceptions.c b/Python/exceptions.c index 0c61c5df95..f262ef2a97 100644 --- a/Python/exceptions.c +++ b/Python/exceptions.c @@ -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); - lineno = PySequence_GetItem(info, 1); - offset = PySequence_GetItem(info, 2); - 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 (filename != NULL) { + lineno = PySequence_GetItem(info, 1); + if (lineno != NULL) { + offset = PySequence_GetItem(info, 2); + if (offset != NULL) { + text = PySequence_GetItem(info, 3); + 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_DECREF(offset); + } + Py_DECREF(lineno); + } + Py_DECREF(filename); } - Py_XDECREF(filename); - Py_XDECREF(lineno); - Py_XDECREF(offset); - Py_XDECREF(text); + Py_DECREF(info); if (status) goto finally; |