Log message for revision 71126:
  Collector #2235. Stop ZCatalog.manage_catalogObject from doing boolean 
evaluation of found objects.
  

Changed:
  U   Zope/branches/Zope-2_8-branch/doc/CHANGES.txt
  U   Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalog.py
  U   
Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/tests/testCatalog.py

-=-
Modified: Zope/branches/Zope-2_8-branch/doc/CHANGES.txt
===================================================================
--- Zope/branches/Zope-2_8-branch/doc/CHANGES.txt       2006-11-15 04:43:00 UTC 
(rev 71125)
+++ Zope/branches/Zope-2_8-branch/doc/CHANGES.txt       2006-11-15 05:32:07 UTC 
(rev 71126)
@@ -8,6 +8,9 @@
 
     Bugs fixed
 
+      - Collector #2235: ZCatalog.manage_catalogObject was triggering __len__
+        of objects that implement it, like containers.
+
       - Fix yet another resTructuredText glitch, and add tests (test
         backported from 2.9, which was not in fact vulnerable).
 

Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalog.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalog.py      
2006-11-15 04:43:00 UTC (rev 71125)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalog.py      
2006-11-15 05:32:07 UTC (rev 71126)
@@ -232,7 +232,7 @@
 
             for url in urls:
                 obj = self.resolve_path(url)
-                if not obj:
+                if obj is not None:
                     obj = self.resolve_url(url, REQUEST)
                 if obj is not None:
                     self.catalog_object(obj, url)

Modified: 
Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/tests/testCatalog.py
===================================================================
--- 
Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/tests/testCatalog.py 
    2006-11-15 04:43:00 UTC (rev 71125)
+++ 
Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/tests/testCatalog.py 
    2006-11-15 05:32:07 UTC (rev 71126)
@@ -246,6 +246,27 @@
         result = self._catalog(title='9999')
         self.assertEquals(1, len(result))
 
+    def test_manage_catalogObject_does_not_trigger_boolean_eval(self):
+        # make objects with __len__ and __nonzero__
+        class mydummy1:
+            def __init__(self, fail):
+                self.fail = fail
+            def __len__(self):
+                self.fail("__len__() was called")
+        class mydummy2:
+            def __init__(self, fail):
+                self.fail = fail
+            def __nonzero__(self):
+                self.fail("__nonzero__() was called")
+        # store them to be found by the catalog
+        self.d['0'] = mydummy1(self.fail)
+        self.d['1'] = mydummy2(self.fail)
+        # create a fake response that doesn't bomb on manage_catalogObject()
+        class myresponse:
+            def redirect(self, url):
+                pass
+        # this next call should not fail
+        self._catalog.manage_catalogObject(None, myresponse(), 'URL1', 
urls=('0', '1'))
 
 class dummy(ExtensionClass.Base):
     att1 = 'att1'

_______________________________________________
Zope-Checkins maillist  -  Zope-Checkins@zope.org
http://mail.zope.org/mailman/listinfo/zope-checkins

Reply via email to