[Checkins] SVN: zope.session/trunk/ Bug fix
Patrick Strawderman
patrick at zope.com
Thu Mar 10 10:00:06 EST 2011
Log message for revision 120848:
Bug fix
Changed:
U zope.session/trunk/CHANGES.txt
U zope.session/trunk/src/zope/session/session.py
U zope.session/trunk/src/zope/session/tests.py
-=-
Modified: zope.session/trunk/CHANGES.txt
===================================================================
--- zope.session/trunk/CHANGES.txt 2011-03-10 14:55:27 UTC (rev 120847)
+++ zope.session/trunk/CHANGES.txt 2011-03-10 15:00:06 UTC (rev 120848)
@@ -4,7 +4,9 @@
3.9.5 (unreleased)
------------------
-- No changes yet
+- Fix a bug in zope.session.session.Session that would trigger an
+ infinite loop if either iteration or a containment test were
+ attempted on an instance.
3.9.4 (2011-03-07)
Modified: zope.session/trunk/src/zope/session/session.py
===================================================================
--- zope.session/trunk/src/zope/session/session.py 2011-03-10 14:55:27 UTC (rev 120847)
+++ zope.session/trunk/src/zope/session/session.py 2011-03-10 15:00:06 UTC (rev 120848)
@@ -470,6 +470,10 @@
return spd
+ def __iter__(self):
+ raise NotImplementedError
+
+
class SessionData(persistent.Persistent, IterableUserDict):
"""See zope.session.interfaces.ISessionData
Modified: zope.session/trunk/src/zope/session/tests.py
===================================================================
--- zope.session/trunk/src/zope/session/tests.py 2011-03-10 14:55:27 UTC (rev 120847)
+++ zope.session/trunk/src/zope/session/tests.py 2011-03-10 15:00:06 UTC (rev 120848)
@@ -127,7 +127,34 @@
Q.E.D.
"""
+def testSessionIterationBug():
+ """
+ The zope.session.session.Session ISession implementation defines
+ an `__iter__` method that raises NotImplementedError in order to
+ avoid an infinite loop if iteration or a test for containment is
+ attempted on an instance.
+
+ >>> import zope.session.session
+ >>> request = setUp()
+ >>> session = zope.session.session.Session(request)
+ >>> try:
+ ... "blah" in session
+ ... except TypeError:
+ ... pass
+ ... else:
+ ... raise Exception("Should have raised TypeError")
+
+ >>> for i in session:
+ ... raise Exception("Should have raised NotImplementedError")
+ Traceback (most recent call last):
+ ...
+ NotImplementedError
+
+ >>> tearDown()
+ """
+
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(doctest.DocTestSuite())
More information about the checkins
mailing list