Commit c67f4864 authored by Christophe Combelles's avatar Christophe Combelles

fixed #238579 / #163149: error with unicode traversing

parent a8a5d48d
......@@ -2,6 +2,11 @@
CHANGES
=======
3.6dev (unreleased)
-------------------
- fixed #238579 / #163149: error with unicode traversing
3.6.0 (2008-05-06)
------------------
......
......@@ -337,6 +337,30 @@ class Test(BrowserTestCase):
body = response.getBody()
self.assert_("cannot be moved" in body)
def test_copy_then_delete_with_unicode_name(self):
"""Tests unicode on object copied then deleted (#238579)."""
# create a file with an accentuated unicode name
root = self.getRootFolder()
root[u'voil\xe0'] = File()
transaction.commit()
# copy the object
response = self.publish('/@@contents.html', basic='mgr:mgrpw', form={
'ids' : (u'voil\xe0',),
'container_copy_button' : '' })
self.assertEqual(response.getStatus(), 302)
self.assertEqual(response.getHeader('Location'),
'http://localhost/@@contents.html')
response = self.publish('/@@contents.html', basic='mgr:mgrpw')
self.assertEqual(response.getStatus(), 200)
# delete the object
del root[u'voil\xe0']
transaction.commit()
response = self.publish('/@@contents.html', basic='mgr:mgrpw')
self.assertEqual(response.getStatus(), 200)
def test_suite():
suite = unittest.TestSuite()
......
......@@ -59,6 +59,11 @@ class Test(CleanUp, unittest.TestCase):
self.failUnless(T.traverse('bar', []) is bar)
self.assertRaises(TraversalError , T.traverse, 'morebar', [])
def test_unicode_attr(self):
# test traversal with unicode
voila = Container()
c = Container({}, {u'voil\xe0': voila})
self.failUnless(ContainerTraversable(c).traverse(u'voil\xe0', []) is voila)
def test_suite():
......
......@@ -95,7 +95,14 @@ class ContainerTraversable(object):
v = container.get(name, _marker)
if v is _marker:
v = getattr(container, name, _marker)
try:
# Note that if name is a unicode string, getattr will
# implicitly try to encode it using the system
# encoding (usually ascii). Failure to encode means
# invalid attribute name.
v = getattr(container, name, _marker)
except UnicodeEncodeError:
raise TraversalError(container, name)
if v is _marker:
raise TraversalError(container, name)
......
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