]> granicus.if.org Git - python/commitdiff
SyntaxError__init__(): Be a little more robust when picking apart the
authorFred Drake <fdrake@acm.org>
Wed, 28 Feb 2001 21:52:10 +0000 (21:52 +0000)
committerFred Drake <fdrake@acm.org>
Wed, 28 Feb 2001 21:52:10 +0000 (21:52 +0000)
    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

index 0c61c5df9597d933216a8b20a324ca203c5b031b..f262ef2a97d3f6d59ba8e8fd6aae4507f831736d 100644 (file)
@@ -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;