Commit e5cfa231 authored by Jim Fulton's avatar Jim Fulton

Bugs Fixed:

- BTree sets and tree sets didn't correctly check values passed to
  update or to constructors, causing Python to exit under certain
  circumstances.
parent f8fcf736
......@@ -4,11 +4,16 @@ Whats new in ZODB 3.8.6 (2010-??-??)
Bug Fixed:
- BTree sets and tree sets didn't correctly check values passed to
update or to constructors, causing Python to exit under certain
circumstances.
- Fixed a serious bug that caused cache failures when run
with Python optimization turned on.
https://bugs.launchpad.net/zodb/+bug/544305
Whats new in ZODB 3.8.5 (2009-12-16)
====================================
......
......@@ -32,10 +32,9 @@ Set_insert(Bucket *self, PyObject *args)
static int
_Set_update(Bucket *self, PyObject *seq)
{
int n = -1;
int n=0, ind=0;
PyObject *iter, *v;
int ind;
iter = PyObject_GetIter(seq);
if (iter == NULL)
return -1;
......@@ -55,15 +54,11 @@ _Set_update(Bucket *self, PyObject *seq)
else
n += ind;
}
/* n starts out at -1, which is the error return value. If
this point is reached, then there is no error. n must be
incremented to account for the initial value of -1 instead of
0.
*/
n++;
err:
Py_DECREF(iter);
if (ind < 0)
return -1;
return n;
}
......
......@@ -35,9 +35,8 @@ TreeSet_insert(BTree *self, PyObject *args)
static int
_TreeSet_update(BTree *self, PyObject *seq)
{
int n = -1;
int n=0, ind=0;
PyObject *iter, *v;
int ind;
iter = PyObject_GetIter(seq);
if (iter == NULL)
......@@ -58,15 +57,11 @@ _TreeSet_update(BTree *self, PyObject *seq)
else
n += ind;
}
/* n starts out at -1, which is the error return value. If
this point is reached, then there is no error. n must be
incremented to account for the initial value of -1 instead of
0.
*/
n++;
err:
Py_DECREF(iter);
if (ind < 0)
return -1;
return n;
}
......
......@@ -1376,9 +1376,12 @@ class TestIFBTrees(TestCase):
def _noneraisesvalue(self):
self.t[1] = None
class TestIOSets(TestCase):
def setUp(self):
self.t = IOSet()
class TestI_Sets(TestCase):
def testBadBadKeyAfterFirst(self):
self.assertRaises(TypeError, self.t.__class__, [1, ''])
self.assertRaises(TypeError, self.t.update, [1, ''])
del self.t
def testNonIntegerInsertRaises(self):
self.assertRaises(TypeError,self._insertstringraises)
......@@ -1394,6 +1397,47 @@ class TestIOSets(TestCase):
def _insertnoneraises(self):
self.t.insert(None)
class TestIOSets(TestI_Sets):
def setUp(self):
self.t = IOSet()
class TestIOTreeSets(TestI_Sets):
def setUp(self):
self.t = IOTreeSet()
class TestIISets(TestI_Sets):
def setUp(self):
self.t = IISet()
class TestIITreeSets(TestI_Sets):
def setUp(self):
self.t = IITreeSet()
class TestLOSets(TestI_Sets):
def setUp(self):
self.t = LOSet()
class TestLOTreeSets(TestI_Sets):
def setUp(self):
self.t = LOTreeSet()
class TestLLSets(TestI_Sets):
def setUp(self):
self.t = LLSet()
class TestLLTreeSets(TestI_Sets):
def setUp(self):
self.t = LLTreeSet()
class DegenerateBTree(TestCase):
# Build a degenerate tree (set). Boxes are BTree nodes. There are
# 5 leaf buckets, each containing a single int. Keys in the BTree
......@@ -1820,7 +1864,8 @@ def test_suite():
# checking for assorted TypeErrors, and when both keys
# and values are objects (OO), there's nothing to test.
TestIIBTrees, TestIFBTrees, TestIOBTrees, TestOIBTrees,
TestIOSets,
TestIOSets, TestIOTreeSets, TestIISets, TestIITreeSets,
TestLOSets, TestLOTreeSets, TestLLSets, TestLLTreeSets,
DegenerateBTree,
TestCmpError,
BugFixes,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment