Skip to content

Commit

Permalink
requote the source when doing a COPY
Browse files Browse the repository at this point in the history
fixes lp bug 857673
also fixes similar bug in post-as-copy code
adds test

Change-Id: I7a1984506bba28afe2b7ba46998d7306c058fd5c
  • Loading branch information
notmyname committed Oct 21, 2011
1 parent bb8c4ea commit 7428978
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 12 deletions.
6 changes: 3 additions & 3 deletions swift/proxy/server.py
Expand Up @@ -887,8 +887,8 @@ def POST(self, req):
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
Expand Down Expand Up @@ -1228,7 +1228,7 @@ def COPY(self, req):
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)

Expand Down
12 changes: 3 additions & 9 deletions test/functional/tests.py
Expand Up @@ -801,16 +801,17 @@ 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 = {}
for i in range(1):
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())
Expand Down Expand Up @@ -887,12 +888,6 @@ def testCopyDestinationSlashProblems(self):
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)
Expand Down Expand Up @@ -952,7 +947,6 @@ def testCopyFromHeader404s(self):
hdrs={'X-Copy-From': '%s%s/%s' % (prefix,
self.env.container.name, source_filename)})
self.assert_status(404)
"""

def testNameLimit(self):
limit = 1024
Expand Down

0 comments on commit 7428978

Please sign in to comment.