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().
diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c
index a503a80..fcfcbd4 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 @@
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);
}