[Zodb-checkins] SVN: ZODB/trunk/src/ Bug Fixed:
Jim Fulton
jim at zope.com
Fri May 7 17:55:07 EDT 2010
Log message for revision 112175:
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.
Changed:
U ZODB/trunk/src/BTrees/SetTemplate.c
U ZODB/trunk/src/BTrees/TreeSetTemplate.c
U ZODB/trunk/src/BTrees/tests/testBTrees.py
U ZODB/trunk/src/CHANGES.txt
-=-
Modified: ZODB/trunk/src/BTrees/SetTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/SetTemplate.c 2010-05-07 21:54:49 UTC (rev 112174)
+++ ZODB/trunk/src/BTrees/SetTemplate.c 2010-05-07 21:55:07 UTC (rev 112175)
@@ -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/trunk/src/BTrees/TreeSetTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/TreeSetTemplate.c 2010-05-07 21:54:49 UTC (rev 112174)
+++ ZODB/trunk/src/BTrees/TreeSetTemplate.c 2010-05-07 21:55:07 UTC (rev 112175)
@@ -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/trunk/src/BTrees/tests/testBTrees.py
===================================================================
--- ZODB/trunk/src/BTrees/tests/testBTrees.py 2010-05-07 21:54:49 UTC (rev 112174)
+++ ZODB/trunk/src/BTrees/tests/testBTrees.py 2010-05-07 21:55:07 UTC (rev 112175)
@@ -1387,10 +1387,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)
@@ -1405,6 +1408,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
@@ -1758,7 +1802,6 @@
self.assertEqual(len(t), 0)
self.assertEqual(len(LP294788_ids), 0)
-
class IIBTreeTest(BTreeTests):
def setUp(self):
self.t = IIBTree()
@@ -2083,7 +2126,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,
Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt 2010-05-07 21:54:49 UTC (rev 112174)
+++ ZODB/trunk/src/CHANGES.txt 2010-05-07 21:55:07 UTC (rev 112175)
@@ -14,6 +14,13 @@
https://bugs.launchpad.net/zodb/+bug/118512
+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.
+
3.10.0a2 (2010-05-04)
=====================
@@ -53,7 +60,6 @@
- ZEO servers no longer log their pids in every log message. It's just
not interesting. :)
-
Bugs Fixed
----------
More information about the Zodb-checkins
mailing list