[Zodb-checkins] SVN: ZODB/branches/3.8/ Bugs Fixed:
Jim Fulton
jim at zope.com
Mon Sep 20 15:40:55 EDT 2010
Log message for revision 116683:
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.
Changed:
U ZODB/branches/3.8/NEWS.txt
U ZODB/branches/3.8/src/BTrees/SetTemplate.c
U ZODB/branches/3.8/src/BTrees/TreeSetTemplate.c
U ZODB/branches/3.8/src/BTrees/tests/testBTrees.py
-=-
Modified: ZODB/branches/3.8/NEWS.txt
===================================================================
--- ZODB/branches/3.8/NEWS.txt 2010-09-20 19:27:07 UTC (rev 116682)
+++ ZODB/branches/3.8/NEWS.txt 2010-09-20 19:40:55 UTC (rev 116683)
@@ -4,11 +4,16 @@
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)
====================================
Modified: ZODB/branches/3.8/src/BTrees/SetTemplate.c
===================================================================
--- ZODB/branches/3.8/src/BTrees/SetTemplate.c 2010-09-20 19:27:07 UTC (rev 116682)
+++ ZODB/branches/3.8/src/BTrees/SetTemplate.c 2010-09-20 19:40:55 UTC (rev 116683)
@@ -32,10 +32,9 @@
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 @@
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;
}
Modified: ZODB/branches/3.8/src/BTrees/TreeSetTemplate.c
===================================================================
--- ZODB/branches/3.8/src/BTrees/TreeSetTemplate.c 2010-09-20 19:27:07 UTC (rev 116682)
+++ ZODB/branches/3.8/src/BTrees/TreeSetTemplate.c 2010-09-20 19:40:55 UTC (rev 116683)
@@ -35,9 +35,8 @@
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 @@
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;
}
Modified: ZODB/branches/3.8/src/BTrees/tests/testBTrees.py
===================================================================
--- ZODB/branches/3.8/src/BTrees/tests/testBTrees.py 2010-09-20 19:27:07 UTC (rev 116682)
+++ ZODB/branches/3.8/src/BTrees/tests/testBTrees.py 2010-09-20 19:40:55 UTC (rev 116683)
@@ -1376,10 +1376,13 @@
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)
self.assertRaises(TypeError,self._insertfloatraises)
@@ -1394,6 +1397,47 @@
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 @@
# 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,
More information about the Zodb-checkins
mailing list