summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2006-06-05 00:31:01 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2006-06-05 00:31:01 (GMT)
commit3dd20022ac3da63c4fe867a773d623e4fa1fce04 (patch)
tree5487ab20d2e69684d9ebbde01de91cdd78f09c7a
parent1985ff76ca757d0b6baf80725c405ffc91cc551a (diff)
downloadcpython-3dd20022ac3da63c4fe867a773d623e4fa1fce04.zip
cpython-3dd20022ac3da63c4fe867a773d623e4fa1fce04.tar.gz
cpython-3dd20022ac3da63c4fe867a773d623e4fa1fce04.tar.bz2
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.
-rw-r--r--Lib/bsddb/test/test_basics.py3
-rw-r--r--Modules/_bsddb.c14
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);