diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2006-03-20 04:08:12 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2006-03-20 04:08:12 (GMT) |
commit | d1e0ef68fb3b92b4c54cbb614d521e28078f4788 (patch) | |
tree | 7a2e91846225237b2a103198ca539dc2afebdf79 | |
parent | c3264e50e741ccac19f949ff87803f576b5a4918 (diff) | |
download | cpython-d1e0ef68fb3b92b4c54cbb614d521e28078f4788.zip cpython-d1e0ef68fb3b92b4c54cbb614d521e28078f4788.tar.gz cpython-d1e0ef68fb3b92b4c54cbb614d521e28078f4788.tar.bz2 |
SF #1445431, fix some leaks in error conditions.
-rw-r--r-- | Modules/parsermodule.c | 23 | ||||
-rw-r--r-- | Modules/posixmodule.c | 9 |
2 files changed, 19 insertions, 13 deletions
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 83165ba..3a886b4 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -657,9 +657,10 @@ build_node_children(PyObject *tuple, node *root, int *line_num) } } if (!ok) { - PyErr_SetObject(parser_error, - Py_BuildValue("os", elem, - "Illegal node construct.")); + PyObject *err = Py_BuildValue("os", elem, + "Illegal node construct."); + PyErr_SetObject(parser_error, err); + Py_XDECREF(err); Py_XDECREF(elem); return (0); } @@ -710,8 +711,9 @@ build_node_children(PyObject *tuple, node *root, int *line_num) * It has to be one or the other; this is an error. * Throw an exception. */ - PyErr_SetObject(parser_error, - Py_BuildValue("os", elem, "unknown node type.")); + PyObject *err = Py_BuildValue("os", elem, "unknown node type."); + PyErr_SetObject(parser_error, err); + Py_XDECREF(err); Py_XDECREF(elem); return (0); } @@ -762,6 +764,7 @@ build_node_tree(PyObject *tuple) tuple = Py_BuildValue("os", tuple, "Illegal syntax-tree; cannot start with terminal symbol."); PyErr_SetObject(parser_error, tuple); + Py_XDECREF(tuple); } else if (ISNONTERMINAL(num)) { /* @@ -792,14 +795,16 @@ build_node_tree(PyObject *tuple) } } } - else + else { /* The tuple is illegal -- if the number is neither TERMINAL nor * NONTERMINAL, we can't use it. Not sure the implementation * allows this condition, but the API doesn't preclude it. */ - PyErr_SetObject(parser_error, - Py_BuildValue("os", tuple, - "Illegal component tuple.")); + PyObject *err = Py_BuildValue("os", tuple, + "Illegal component tuple."); + PyErr_SetObject(parser_error, err); + Py_XDECREF(err); + } return (res); } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 1fbc353..116b66b 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -6396,15 +6396,16 @@ posix_tmpnam(PyObject *self, PyObject *noargs) name = tmpnam(buffer); #endif if (name == NULL) { - PyErr_SetObject(PyExc_OSError, - Py_BuildValue("is", 0, + PyObject *err = Py_BuildValue("is", 0, #ifdef USE_TMPNAM_R "unexpected NULL from tmpnam_r" #else "unexpected NULL from tmpnam" #endif - )); - return NULL; + ); + PyErr_SetObject(PyExc_OSError, err); + Py_XDECREF(err); + return NULL; } return PyString_FromString(buffer); } |