From 3dd20022ac3da63c4fe867a773d623e4fa1fce04 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Mon, 5 Jun 2006 00:31:01 +0000 Subject: bugfix: when log_archive was called with the DB_ARCH_REMOVE flag present in BerkeleyDB >= 4.2 it tried to construct a list out of an uninitialized char **log_list. feature: export the DB_ARCH_REMOVE flag by name in the module on BerkeleyDB >= 4.2. --- Lib/bsddb/test/test_basics.py | 3 +++ Modules/_bsddb.c | 14 +++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Lib/bsddb/test/test_basics.py b/Lib/bsddb/test/test_basics.py index 24c4038..92cad06 100644 --- a/Lib/bsddb/test/test_basics.py +++ b/Lib/bsddb/test/test_basics.py @@ -665,6 +665,9 @@ class BasicTransactionTestCase(BasicTestCase): for log in logs: if verbose: print 'log file: ' + log + if db.version >= (4,2): + logs = self.env.log_archive(db.DB_ARCH_REMOVE) + assert not logs self.txn = self.env.txn_begin() diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c index c8edaa0..2df73fe 100644 --- a/Modules/_bsddb.c +++ b/Modules/_bsddb.c @@ -4371,13 +4371,17 @@ DBEnv_log_archive(DBEnvObject* self, PyObject* args) { int flags=0; int err; - char **log_list_start, **log_list; + char **log_list = NULL; PyObject* list; PyObject* item = NULL; if (!PyArg_ParseTuple(args, "|i:log_archive", &flags)) return NULL; + list = PyList_New(0); + if (list == NULL) + return NULL; + CHECK_ENV_NOT_CLOSED(self); MYDB_BEGIN_ALLOW_THREADS; #if (DBVER >= 40) @@ -4390,11 +4394,8 @@ DBEnv_log_archive(DBEnvObject* self, PyObject* args) MYDB_END_ALLOW_THREADS; RETURN_IF_ERR(); - list = PyList_New(0); - if (list == NULL) - return NULL; - if (log_list) { + char **log_list_start; for (log_list_start = log_list; *log_list != NULL; ++log_list) { item = PyString_FromString (*log_list); if (item == NULL) { @@ -5247,6 +5248,9 @@ DL_EXPORT(void) init_bsddb(void) ADD_INT(d, DB_ARCH_ABS); ADD_INT(d, DB_ARCH_DATA); ADD_INT(d, DB_ARCH_LOG); +#if (DBVER >= 42) + ADD_INT(d, DB_ARCH_REMOVE); +#endif ADD_INT(d, DB_BTREE); ADD_INT(d, DB_HASH); -- cgit v0.12