From 0812de63c29c144fd68165ae929b9765656fc7b3 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sat, 17 May 2008 06:46:39 +0000 Subject: [PATCH] fix issue2858: potential memory corruption when any of the bsddb.db.* constructors raised an exception. backportes from trunk c63403. --- Misc/NEWS | 3 +++ Modules/_bsddb.c | 12 +++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index e53f02be72..f7d732717c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -89,6 +89,9 @@ Extension Modules - zlib.decompressobj().flush(value) no longer crashes the interpreter when passed a value less than or equal to zero. +- issue2858: Fix potential memory corruption when bsddb.db.DBEnv.lock_get + and other bsddb.db object constructors raised an exception. + Tests ----- diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c index 4cedc98d7b..9c9a6b3477 100644 --- a/Modules/_bsddb.c +++ b/Modules/_bsddb.c @@ -834,7 +834,7 @@ newDBObject(DBEnvObject* arg, int flags) Py_DECREF(self->myenvobj); self->myenvobj = NULL; } - PyObject_Del(self); + Py_DECREF(self); self = NULL; } return self; @@ -955,7 +955,7 @@ newDBEnvObject(int flags) err = db_env_create(&self->db_env, flags); MYDB_END_ALLOW_THREADS; if (makeDBError(err)) { - PyObject_Del(self); + Py_DECREF(self); self = NULL; } else { @@ -1004,8 +1004,7 @@ newDBTxnObject(DBEnvObject* myenv, DB_TXN *parent, int flags) #endif MYDB_END_ALLOW_THREADS; if (makeDBError(err)) { - Py_DECREF(self->env); - PyObject_Del(self); + Py_DECREF(self); self = NULL; } return self; @@ -1062,7 +1061,7 @@ newDBLockObject(DBEnvObject* myenv, u_int32_t locker, DBT* obj, #endif MYDB_END_ALLOW_THREADS; if (makeDBError(err)) { - PyObject_Del(self); + Py_DECREF(self); self = NULL; } @@ -1103,8 +1102,7 @@ newDBSequenceObject(DBObject* mydb, int flags) err = db_sequence_create(&self->sequence, self->mydb->db, flags); MYDB_END_ALLOW_THREADS; if (makeDBError(err)) { - Py_DECREF(self->mydb); - PyObject_Del(self); + Py_DECREF(self); self = NULL; } -- 2.50.0