From 9da7f3b4f44eb4e2c9782f9f73da5e46dc1b9f96 Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Wed, 28 Feb 2001 21:52:10 +0000 Subject: 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. --- Python/exceptions.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/Python/exceptions.c b/Python/exceptions.c index 0c61c5d..f262ef2 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; -- cgit v0.12