From d503913594f1f801f93d0d29df1ce86db9891315 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 30 Jan 1995 12:45:38 +0000 Subject: plug leak and improve error handling in dbm_keys() --- Modules/dbmmodule.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Modules/dbmmodule.c b/Modules/dbmmodule.c index 867461f..2ec43ff 100644 --- a/Modules/dbmmodule.c +++ b/Modules/dbmmodule.c @@ -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; } -- cgit v0.12