logo       

traversal bug with OFS.Application.Application: msg#00013

web.zope.z3base.five

Subject: traversal bug with OFS.Application.Application

After upgrading to Zope 2.9.2 from 2.9.0 I found that one my applications
wasn't working anymore.

It depended on being able to bind a page template to
OFS.Application.Application and through some examination I found a small bug
in the traversal fallback changes that were made recently.

It basically boils down to OFS.Application.Application's __bobo_traverse__
raises NotFound when there is a valid REQUEST.

I've attached a unit test that demonstrates the problem and also the small
patch which fixes it.

PS. There are two questions I had for more experienced testers on this list:

1. Why does http() return 404 but then actually return the correct content in
the test case I added?

2. Why must I use zope2.View instead of zope2.Public. If I use zope2.Public I
get authentication errors?

--
Jordan Baker (jbb@xxxxxxxxxxxxx)

===================================================================
Index: browser/tests/test_traversable.py
===================================================================
--- browser/tests/test_traversable.py (revision 66357)
+++ browser/tests/test_traversable.py (working copy)
@@ -258,7 +258,46 @@
>>> tearDown()
"""

+def test_traverse_ofs_application():
+ """
+ Test for Five fallback when traversing OFS.Application.Application.
+ In Zope 2.9.2 OFS.Application.Application.__bobo_traverse__ raises NotFound
when it has a REQUEST and so its impossible to use Five traversal with it.

+ Set up:
+
+
+ >>> from zope.app.testing.placelesssetup import setUp, tearDown
+ >>> setUp()
+
+ >>> configure_zcml = '''
+ ... <configure xmlns="http://namespaces.zope.org/zope";
+ ... xmlns:five="http://namespaces.zope.org/five";
+ ... xmlns:browser="http://namespaces.zope.org/browser";>
+ ... <five:traversable class="OFS.Application.Application"/>
+ ... <browser:page for="*" name="hello.html"
template="browser/tests/falcon.pt" permission="zope2.View"/>
+ ... </configure>'''
+
+ >>> import Products.Five
+ >>> from Products.Five import zcml
+ >>> zcml.load_config('configure.zcml', Products.Five)
+ >>> zcml.load_string(configure_zcml)
+
+ >>> print http(r'''
+ ... GET /hello.html HTTP/1.1
+ ...
+ ... ''')
+ HTTP/1.1 404 Not Found
+ Content-Length: 35
+ Content-Type: text/html; charset=iso-8859-15
+ <BLANKLINE>
+ <p>The falcon has taken flight</p>
+ <BLANKLINE>
+
+ Clean up:
+
+ >>> tearDown()
+ """
+
def test_suite():
from Testing.ZopeTestCase import FunctionalDocTestSuite
return FunctionalDocTestSuite()
Index: traversable.py
===================================================================
--- traversable.py (revision 66357)
+++ traversable.py (working copy)
@@ -61,7 +61,7 @@
if hasattr(self, '__fallback_traverse__'):
try:
return self.__fallback_traverse__(REQUEST, name)
- except (AttributeError, KeyError):
+ except (NotFound, AttributeError, KeyError):
pass
else:
try:



<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise