Merged revisions 69100 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r69100 | antoine.pitrou | 2009-01-29 21:19:34 +0100 (jeu., 29 janv. 2009) | 5 lines

  Issue #2047: shutil.move() could believe that its destination path was
  inside its source path if it began with the same letters (e.g. "src" vs.
  "src.new").
........
This commit is contained in:
Antoine Pitrou 2009-01-29 20:26:59 +00:00
parent 891f2631f5
commit 0dcc3cdca5
3 changed files with 33 additions and 1 deletions

View File

@ -265,4 +265,10 @@ def move(src, dst):
os.unlink(src)
def destinsrc(src, dst):
return abspath(dst).startswith(abspath(src))
src = abspath(src)
dst = abspath(dst)
if not src.endswith(os.path.sep):
src += os.path.sep
if not dst.endswith(os.path.sep):
dst += os.path.sep
return dst.startswith(src)

View File

@ -340,7 +340,29 @@ class TestMove(unittest.TestCase):
dst = os.path.join(self.src_dir, "bar")
self.assertRaises(shutil.Error, shutil.move, self.src_dir, dst)
def test_destinsrc_false_negative(self):
os.mkdir(TESTFN)
try:
for src, dst in [('srcdir', 'srcdir/dest')]:
src = os.path.join(TESTFN, src)
dst = os.path.join(TESTFN, dst)
self.assert_(shutil.destinsrc(src, dst),
msg='destinsrc() wrongly concluded that '
'dst (%s) is not in src (%s)' % (dst, src))
finally:
shutil.rmtree(TESTFN, ignore_errors=True)
def test_destinsrc_false_positive(self):
os.mkdir(TESTFN)
try:
for src, dst in [('srcdir', 'src/dest'), ('srcdir', 'srcdir.new')]:
src = os.path.join(TESTFN, src)
dst = os.path.join(TESTFN, dst)
self.failIf(shutil.destinsrc(src, dst),
msg='destinsrc() wrongly concluded that '
'dst (%s) is in src (%s)' % (dst, src))
finally:
shutil.rmtree(TESTFN, ignore_errors=True)
def test_main():
support.run_unittest(TestShutil, TestMove)

View File

@ -147,6 +147,10 @@ Core and Builtins
Library
-------
- Issue #2047: shutil.move() could believe that its destination path was
inside its source path if it began with the same letters (e.g. "src" vs.
"src.new").
- Added the ttk module. See issue #2983: Ttk support for Tkinter.
- Removed isSequenceType(), isMappingType, and isNumberType() from the