Nailed a couple of memory leaks, caught by Purify.

This commit is contained in:
Barry Warsaw 1997-01-09 22:22:05 +00:00
parent 4b76ba3280
commit 4bc9d39560
4 changed files with 25 additions and 8 deletions

View File

@ -51,6 +51,7 @@ static PyObject *mkgrent(p)
Py_DECREF(w);
return NULL;
}
Py_DECREF(x);
}
v = Py_BuildValue("(sslO)",
p->gr_name,
@ -112,6 +113,7 @@ static PyObject *grp_getgrall(self, args)
Py_DECREF(d);
return NULL;
}
Py_DECREF(v);
}
return d;
}

View File

@ -292,7 +292,7 @@ nis_maplist ()
nisresp_maplist *list;
char *dom;
CLIENT *cl, *clnt_create();
char *server = "";
char *server = NULL;
int mapi = 0;
int err;
@ -301,25 +301,32 @@ nis_maplist ()
return NULL;
}
while (!strcmp("", server) && aliases[mapi].map != 0L) {
while (!server && aliases[mapi].map != 0L) {
yp_master (dom, aliases[mapi].map, &server);
mapi++;
}
if (!strcmp("", server)) {
if (!server) {
PyErr_SetString(NisError, "No NIS master found for any map");
return NULL;
}
cl = clnt_create(server, YPPROG, YPVERS, "tcp");
if (cl == NULL) {
PyErr_SetString(NisError, clnt_spcreateerror(server));
return NULL;
goto finally;
}
list = nisproc_maplist_2 (&dom, cl);
clnt_destroy(cl);
if (list == NULL)
return NULL;
goto finally;
if (list->stat != NIS_TRUE)
return NULL;
goto finally;
PyMem_DEL(server);
return list->maps;
finally:
PyMem_DEL(server);
return NULL;
}
static PyObject *
@ -337,12 +344,14 @@ nis_maps (self, args)
if ((list = PyList_New(0)) == NULL)
return NULL;
for (maps = maps->next; maps; maps = maps->next) {
if (PyList_Append (list, PyString_FromString (maps->map)) < 0)
PyObject *str = PyString_FromString(maps->map);
if (!str || PyList_Append(list, str) < 0)
{
Py_DECREF(list);
list = NULL;
break;
}
Py_DECREF(str);
}
/* XXX Shouldn't we free the list of maps now? */
return list;

View File

@ -109,6 +109,7 @@ pwd_getpwall(self, args)
Py_DECREF(d);
return NULL;
}
Py_DECREF(v);
}
return d;
}

View File

@ -518,6 +518,8 @@ symcomp(pattern, gdict)
Py_XDECREF(npattern);
return NULL;
}
Py_DECREF(group_name);
Py_DECREF(group_index);
++o; /* eat the '>' */
break;
}
@ -573,6 +575,7 @@ regex_symcomp(self, args)
PyObject *tran = NULL;
PyObject *gdict = NULL;
PyObject *npattern;
PyObject *retval = NULL;
if (!PyArg_ParseTuple(args, "S|S", &pattern, &tran))
return NULL;
@ -583,7 +586,9 @@ regex_symcomp(self, args)
Py_DECREF(pattern);
return NULL;
}
return newregexobject(npattern, tran, pattern, gdict);
retval = newregexobject(npattern, tran, pattern, gdict);
Py_DECREF(npattern);
return retval;
}