From: Neal Norwitz Date: Tue, 21 Nov 2006 05:26:22 +0000 (+0000) Subject: Bug #1599782: Fix segfault on bsddb.db.DB().type(). X-Git-Tag: v2.6a1~2414 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4fe442383d140dbdee28102f8854a7db14370bcb;p=python Bug #1599782: Fix segfault on bsddb.db.DB().type(). The problem is that _DB_get_type() can't be called without the GIL because it calls a bunch of PyErr_* APIs when an error occurs. There were no other cases in this file that it was called without the GIL. Removing the BEGIN/END THREAD around _DB_get_type() made everything work. Will backport. --- diff --git a/Lib/bsddb/test/test_dbobj.py b/Lib/bsddb/test/test_dbobj.py index 6799fc9c22..af494e19fd 100644 --- a/Lib/bsddb/test/test_dbobj.py +++ b/Lib/bsddb/test/test_dbobj.py @@ -69,6 +69,10 @@ class dbobjTestCase(unittest.TestCase): self.db.close() self.env.close() + def test03_dbobj_type_before_open(self): + # Ensure this doesn't cause a segfault. + self.assertRaises(db.DBInvalidArgError, db.DB().type) + #---------------------------------------------------------------------- def test_suite(): diff --git a/Misc/NEWS b/Misc/NEWS index 0e2969ea51..d58cce5146 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -242,6 +242,8 @@ Extension Modules a2b_qp() function, instead leave it in the string as quopri.decode() does. +- Bug #1599782: Fix segfault on bsddb.db.DB().type(). + - Bug #1567666: Emulate GetFileAttributesExA for Win95. - Patch #1576166: Support os.utime for directories on Windows NT+. diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c index 9be5c6aa42..e6046e7231 100644 --- a/Modules/_bsddb.c +++ b/Modules/_bsddb.c @@ -1779,9 +1779,7 @@ DB_get_type(DBObject* self, PyObject* args) return NULL; CHECK_DB_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; type = _DB_get_type(self); - MYDB_END_ALLOW_THREADS; if (type == -1) return NULL; return PyInt_FromLong(type);