requote the source when doing a COPY

fixes lp bug 857673
also fixes similar bug in post-as-copy code
adds test

Change-Id: I7a1984506bba28afe2b7ba46998d7306c058fd5c
This commit is contained in:
John Dickinson 2011-10-19 09:21:14 -05:00
parent bb8c4eab41
commit 742897856f
2 changed files with 6 additions and 12 deletions

View File

@ -887,8 +887,8 @@ class ObjectController(Controller):
req.path_info = '/%s/%s/%s' % (self.account_name,
self.container_name, self.object_name)
req.headers['Content-Length'] = 0
req.headers['X-Copy-From'] = '/%s/%s' % (self.container_name,
self.object_name)
req.headers['X-Copy-From'] = quote('/%s/%s' % (self.container_name,
self.object_name))
req.headers['X-Fresh-Metadata'] = 'true'
resp = self.PUT(req)
# Older editions returned 202 Accepted on object POSTs, so we'll
@ -1228,7 +1228,7 @@ class ObjectController(Controller):
req.method = 'PUT'
req.path_info = '/' + self.account_name + dest
req.headers['Content-Length'] = 0
req.headers['X-Copy-From'] = source
req.headers['X-Copy-From'] = quote(source)
del req.headers['Destination']
return self.PUT(req)

View File

@ -801,9 +801,9 @@ class TestFile(Base):
env = TestFileEnv
set_up = False
"""
def testCopy(self):
source_filename = Utils.create_name()
# makes sure to test encoded characters"
source_filename = 'dealde%2Fl04 011e%204c8df/flash.png'
file = self.env.container.file(source_filename)
metadata = {}
@ -811,6 +811,7 @@ class TestFile(Base):
metadata[Utils.create_name()] = Utils.create_name()
data = file.write_random()
file.sync_metadata(metadata)
dest_cont = self.env.account.container(Utils.create_name())
self.assert_(dest_cont.create())
@ -887,12 +888,6 @@ class TestFile(Base):
cfg={'destination': Utils.create_name()}))
self.assert_status(412)
# extra slash
self.assert_(not file.copy(Utils.create_name(), Utils.create_name(),
cfg={'destination': '/%s/%s/%s' % (Utils.create_name(),
Utils.create_name(), Utils.create_name())}))
self.assert_status(412)
def testCopyFromHeader(self):
source_filename = Utils.create_name()
file = self.env.container.file(source_filename)
@ -952,7 +947,6 @@ class TestFile(Base):
hdrs={'X-Copy-From': '%s%s/%s' % (prefix,
self.env.container.name, source_filename)})
self.assert_status(404)
"""
def testNameLimit(self):
limit = 1024