[Zope-Checkins] SVN: Zope/branches/Zope-2_8-branch/ Collector #2235. Stop ZCatalog.manage_catalogObject from doing boolean evaluation of found objects.

Leonardo Rochael Almeida leo at hiper.com.br
Wed Nov 15 00:32:08 EST 2006


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'



More information about the Zope-Checkins mailing list