Kaydet (Commit) 0812de63 authored tarafından Gregory P. Smith's avatar Gregory P. Smith

fix issue2858: potential memory corruption when any of the bsddb.db.*

constructors raised an exception.  backportes from trunk c63403.
üst 09d374fd
...@@ -89,6 +89,9 @@ Extension Modules ...@@ -89,6 +89,9 @@ Extension Modules
- zlib.decompressobj().flush(value) no longer crashes the interpreter when - zlib.decompressobj().flush(value) no longer crashes the interpreter when
passed a value less than or equal to zero. 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 Tests
----- -----
......
...@@ -834,7 +834,7 @@ newDBObject(DBEnvObject* arg, int flags) ...@@ -834,7 +834,7 @@ newDBObject(DBEnvObject* arg, int flags)
Py_DECREF(self->myenvobj); Py_DECREF(self->myenvobj);
self->myenvobj = NULL; self->myenvobj = NULL;
} }
PyObject_Del(self); Py_DECREF(self);
self = NULL; self = NULL;
} }
return self; return self;
...@@ -955,7 +955,7 @@ newDBEnvObject(int flags) ...@@ -955,7 +955,7 @@ newDBEnvObject(int flags)
err = db_env_create(&self->db_env, flags); err = db_env_create(&self->db_env, flags);
MYDB_END_ALLOW_THREADS; MYDB_END_ALLOW_THREADS;
if (makeDBError(err)) { if (makeDBError(err)) {
PyObject_Del(self); Py_DECREF(self);
self = NULL; self = NULL;
} }
else { else {
...@@ -1004,8 +1004,7 @@ newDBTxnObject(DBEnvObject* myenv, DB_TXN *parent, int flags) ...@@ -1004,8 +1004,7 @@ newDBTxnObject(DBEnvObject* myenv, DB_TXN *parent, int flags)
#endif #endif
MYDB_END_ALLOW_THREADS; MYDB_END_ALLOW_THREADS;
if (makeDBError(err)) { if (makeDBError(err)) {
Py_DECREF(self->env); Py_DECREF(self);
PyObject_Del(self);
self = NULL; self = NULL;
} }
return self; return self;
...@@ -1062,7 +1061,7 @@ newDBLockObject(DBEnvObject* myenv, u_int32_t locker, DBT* obj, ...@@ -1062,7 +1061,7 @@ newDBLockObject(DBEnvObject* myenv, u_int32_t locker, DBT* obj,
#endif #endif
MYDB_END_ALLOW_THREADS; MYDB_END_ALLOW_THREADS;
if (makeDBError(err)) { if (makeDBError(err)) {
PyObject_Del(self); Py_DECREF(self);
self = NULL; self = NULL;
} }
...@@ -1103,8 +1102,7 @@ newDBSequenceObject(DBObject* mydb, int flags) ...@@ -1103,8 +1102,7 @@ newDBSequenceObject(DBObject* mydb, int flags)
err = db_sequence_create(&self->sequence, self->mydb->db, flags); err = db_sequence_create(&self->sequence, self->mydb->db, flags);
MYDB_END_ALLOW_THREADS; MYDB_END_ALLOW_THREADS;
if (makeDBError(err)) { if (makeDBError(err)) {
Py_DECREF(self->mydb); Py_DECREF(self);
PyObject_Del(self);
self = NULL; self = NULL;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment