bug 411099: chdir() isn't saving the cwd in a normalized way. added test.

This commit is contained in:
Robey Pointer 2009-10-31 16:06:53 -07:00
parent 7da1f2c4a3
commit 931f71e627
2 changed files with 69 additions and 53 deletions

View File

@ -503,7 +503,8 @@ class SFTPClient (BaseSFTP):
doesn't really have the concept of a current working directory, this
is emulated by paramiko. Once you use this method to set a working
directory, all operations on this SFTPClient object will be relative
to that path.
to that path. You can pass in C{None} to stop using a current working
directory.
@param path: new current working directory
@type path: str
@ -512,9 +513,12 @@ class SFTPClient (BaseSFTP):
@since: 1.4
"""
if path is None:
self._cwd = None
return
if not stat.S_ISDIR(self.stat(path).st_mode):
raise SFTPError(errno.ENOTDIR, "%s: %s" % (os.strerror(errno.ENOTDIR), path))
self._cwd = self.normalize(path)
self._cwd = self.normalize(path).encode('utf-8')
def getcwd(self):
"""

View File

@ -637,7 +637,19 @@ class SFTPTest (unittest.TestCase):
self.fail('exception ' + e)
sftp.unlink(FOLDER + '/\xc3\xbcnic\xc3\xb8\x64\x65')
def test_L_bad_readv(self):
def test_L_utf8_chdir(self):
sftp.mkdir(FOLDER + u'\u00fcnic\u00f8de')
try:
sftp.chdir(FOLDER + u'\u00fcnic\u00f8de')
f = sftp.open('something', 'w')
f.write('okay')
f.close()
sftp.unlink('something')
finally:
sftp.chdir(None)
sftp.rmdir(FOLDER + u'\u00fcnic\u00f8de')
def test_M_bad_readv(self):
"""
verify that readv at the end of the file doesn't essplode.
"""