Commit 55986d1b authored by Tres Seaver's avatar Tres Seaver

Don't publish acquired attributes if acquired object has no docstring.

See https://bugs.launchpad.net/zope2/+bug/713253/
parent 747ce19e
...@@ -4,6 +4,14 @@ Zope Changes ...@@ -4,6 +4,14 @@ Zope Changes
Change information for previous versions of Zope can be found in the Change information for previous versions of Zope can be found in the
file HISTORY.txt. file HISTORY.txt.
Zope 2.10.13 (2011/02/04)
Bugs fixed
- Prevent publication of acquired attributes, where the acquired
object does not have a docstring.
https://bugs.launchpad.net/zope2/+bug/713253/
Zope 2.10.12 (2010/09/01) Zope 2.10.12 (2010/09/01)
Bugs fixed Bugs fixed
......
ZOPEVERSION = 2.10.12-final ZOPEVERSION = 2.10.13-final
ZOPEDIRNAME := Zope-$(ZOPEVERSION) ZOPEDIRNAME := Zope-$(ZOPEVERSION)
ZOPE_REQUIRED_FILES=tmp/$(ZOPEDIRNAME).tgz ZOPE_REQUIRED_FILES=tmp/$(ZOPEDIRNAME).tgz
......
ZOPE_MAJOR_VERSION = '2.10' ZOPE_MAJOR_VERSION = '2.10'
ZOPE_MINOR_VERSION = '12' ZOPE_MINOR_VERSION = '13'
ZOPE_BRANCH_NAME = '$Name$'[6:] or 'no-branch' ZOPE_BRANCH_NAME = '$Name$'[6:] or 'no-branch'
# always start prerelease branches with '0' to avoid upgrade # always start prerelease branches with '0' to avoid upgrade
......
...@@ -116,23 +116,21 @@ class DefaultPublishTraverse(object): ...@@ -116,23 +116,21 @@ class DefaultPublishTraverse(object):
# Again, clear any error status created by __bobo_traverse__ # Again, clear any error status created by __bobo_traverse__
# because we actually found something: # because we actually found something:
request.response.setStatus(200) request.response.setStatus(200)
return subobject
except AttributeError: except AttributeError:
pass pass
# Lastly we try with key access: # Lastly we try with key access:
try: if subobject is None:
subobject = object[name] try:
except TypeError: # unsubscriptable subobject = object[name]
raise KeyError(name) except TypeError: # unsubscriptable
raise KeyError(name)
# Ensure that the object has a docstring, or that the parent # Ensure that the object has a docstring, or that the parent
# object has a pseudo-docstring for the object. Objects that # object has a pseudo-docstring for the object. Objects that
# have an empty or missing docstring are not published. # have an empty or missing docstring are not published.
doc = getattr(subobject, '__doc__', None) doc = getattr(subobject, '__doc__', None)
if doc is None:
doc = getattr(object, '%s__doc__' % name, None)
if not doc: if not doc:
raise Forbidden( raise Forbidden(
"The object at %s has an empty or missing " \ "The object at %s has an empty or missing " \
......
...@@ -166,6 +166,13 @@ class TestBaseRequest(unittest.TestCase): ...@@ -166,6 +166,13 @@ class TestBaseRequest(unittest.TestCase):
r = self._makeOne(root) r = self._makeOne(root)
self.assertRaises(NotFound, r.traverse, 'folder/objBasic/noview') self.assertRaises(NotFound, r.traverse, 'folder/objBasic/noview')
def test_traverse_acquired_attribute_without_docstring(self):
from ZPublisher import NotFound
root, folder = self._makeRootAndFolder()
root._setObject('objBasic', DummyObjectWithoutDocstring())
r = self._makeOne(root)
self.assertRaises(NotFound, r.traverse, 'folder/objBasic')
def test_traverse_class_without_docstring(self): def test_traverse_class_without_docstring(self):
from ZPublisher import NotFound from ZPublisher import NotFound
root, folder = self._makeRootAndFolder() root, folder = self._makeRootAndFolder()
......
...@@ -462,7 +462,7 @@ doclines = __doc__.split("\n") ...@@ -462,7 +462,7 @@ doclines = __doc__.split("\n")
setup(name='Zope', setup(name='Zope',
author=AUTHOR, author=AUTHOR,
version="2.10.7-dev", version="2.10.13",
maintainer="Zope Corporation", maintainer="Zope Corporation",
maintainer_email="zope-dev@zope.org", maintainer_email="zope-dev@zope.org",
url = "http://www.zope.org/", url = "http://www.zope.org/",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment