setup_confname_table(): Close memory leak caused by not decref'ing the

inserted dictionary values.  Also, simplified the logic a bit.
This commit is contained in:
Barry Warsaw 2000-04-13 15:20:40 +00:00
parent 8deecedc6d
commit 3155db3b79
1 changed files with 14 additions and 15 deletions

View File

@ -4325,27 +4325,26 @@ setup_confname_table(table, tablesize, tablename, moddict)
PyObject *moddict;
{
PyObject *d = NULL;
size_t i;
int status;
qsort(table, tablesize, sizeof(struct constdef), cmp_constdefs);
d = PyDict_New();
if (d != NULL) {
PyObject *o;
size_t i = 0;
if (d == NULL)
return -1;
for (; i < tablesize; ++i) {
o = PyInt_FromLong(table[i].value);
if (o == NULL
|| PyDict_SetItemString(d, table[i].name, o) == -1) {
for (i=0; i < tablesize; ++i) {
PyObject *o = PyInt_FromLong(table[i].value);
if (o == NULL || PyDict_SetItemString(d, table[i].name, o) == -1) {
Py_XDECREF(o);
Py_DECREF(d);
d = NULL;
return -1;
}
Py_DECREF(o);
}
if (PyDict_SetItemString(moddict, tablename, d) == -1)
return -1;
return 0;
}
return -1;
status = PyDict_SetItemString(moddict, tablename, d);
Py_DECREF(d);
return status;
}
/* Return -1 on failure, 0 on success. */