mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
plug leak and improve error handling in dbm_keys()
This commit is contained in:
parent
17448e2408
commit
d503913594
1 changed files with 13 additions and 5 deletions
|
@ -168,6 +168,7 @@ dbm_keys(dp, args)
|
|||
{
|
||||
register object *v, *item;
|
||||
datum key;
|
||||
int err;
|
||||
|
||||
if (dp == NULL || !is_dbmobject(dp)) {
|
||||
err_badcall();
|
||||
|
@ -179,11 +180,18 @@ dbm_keys(dp, args)
|
|||
if (v == NULL)
|
||||
return NULL;
|
||||
for (key = dbm_firstkey(dp->di_dbm); key.dptr;
|
||||
key = dbm_nextkey(dp->di_dbm) ) {
|
||||
item = newsizedstringobject(key.dptr, key.dsize);
|
||||
if ( item == 0 )
|
||||
return NULL;
|
||||
addlistitem(v, item);
|
||||
key = dbm_nextkey(dp->di_dbm)) {
|
||||
item = newsizedstringobject(key.dptr, key.dsize);
|
||||
if (item == NULL) {
|
||||
DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
err = addlistitem(v, item);
|
||||
DECREF(item);
|
||||
if (err != 0) {
|
||||
DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue