summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2006-03-20 04:08:12 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2006-03-20 04:08:12 (GMT)
commitd1e0ef68fb3b92b4c54cbb614d521e28078f4788 (patch)
tree7a2e91846225237b2a103198ca539dc2afebdf79
parentc3264e50e741ccac19f949ff87803f576b5a4918 (diff)
downloadcpython-d1e0ef68fb3b92b4c54cbb614d521e28078f4788.zip
cpython-d1e0ef68fb3b92b4c54cbb614d521e28078f4788.tar.gz
cpython-d1e0ef68fb3b92b4c54cbb614d521e28078f4788.tar.bz2
SF #1445431, fix some leaks in error conditions.
-rw-r--r--Modules/parsermodule.c23
-rw-r--r--Modules/posixmodule.c9
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);
}