[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