From a7befda8d80d759cb88ef6732581860166ecf438 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 26 Feb 2004 10:07:14 +0000 Subject: Fixes SF bug # 778421 * Fixed a bug in the compatibility interface set_location() method where it would not properly search to the next nearest key when used on BTree databases. [SF bug id 788421] * Fixed a bug in the compatibility interface set_location() method where it could crash when looking up keys in a hash or recno format database due to an incorrect free(). --- Modules/_bsddb.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'Modules') diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c index a503a8030c..fcfcbd4c00 100644 --- a/Modules/_bsddb.c +++ b/Modules/_bsddb.c @@ -97,7 +97,7 @@ #error "eek! DBVER can't handle minor versions > 9" #endif -#define PY_BSDDB_VERSION "4.2.4" +#define PY_BSDDB_VERSION "4.2.5" static char *rcs_id = "$Id$"; @@ -2940,7 +2940,15 @@ DBC_set_range(DBCursorObject* self, PyObject* args, PyObject* kwargs) data.data, data.size); break; } - FREE_DBT(key); + if (_DB_get_type(self->mydb) == DB_BTREE) { + /* the only time a malloced key is returned is when we + * call this on a BTree database because it performs + * partial matching and needs to return the real key. + * All others leave key untouched [where calling free() + * on it would often segfault]. + */ + FREE_DBT(key); + } FREE_DBT(data); } -- cgit v1.2.1