From: Guido van Rossum Date: Mon, 30 Jan 1995 12:45:38 +0000 (+0000) Subject: plug leak and improve error handling in dbm_keys() X-Git-Tag: v1.2b3~68 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d503913594f1f801f93d0d29df1ce86db9891315;p=thirdparty%2FPython%2Fcpython.git plug leak and improve error handling in dbm_keys() --- diff --git a/Modules/dbmmodule.c b/Modules/dbmmodule.c index 867461fc654c..2ec43ffb8034 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; }