]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
plug leak and improve error handling in dbm_keys()
authorGuido van Rossum <guido@python.org>
Mon, 30 Jan 1995 12:45:38 +0000 (12:45 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 30 Jan 1995 12:45:38 +0000 (12:45 +0000)
Modules/dbmmodule.c

index 867461fc654c340abe957296a31daedb5ad9f3d2..2ec43ffb8034014948e406f9ed5f8ade63f7e256 100644 (file)
@@ -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;
 }