Merge: #2466: ismount now recognizes mount points user can't access.

This commit is contained in:
R David Murray 2016-08-18 21:31:13 -04:00
commit c199603853
4 changed files with 27 additions and 0 deletions

View file

@ -193,6 +193,7 @@ def ismount(path):
parent = join(path, b'..') parent = join(path, b'..')
else: else:
parent = join(path, '..') parent = join(path, '..')
parent = realpath(parent)
try: try:
s2 = os.lstat(parent) s2 = os.lstat(parent)
except OSError: except OSError:

View file

@ -211,6 +211,28 @@ class PosixPathTest(unittest.TestCase):
finally: finally:
os.lstat = save_lstat os.lstat = save_lstat
@unittest.skipIf(posix is None, "Test requires posix module")
def test_ismount_directory_not_readable(self):
# issue #2466: Simulate ismount run on a directory that is not
# readable, which used to return False.
save_lstat = os.lstat
def fake_lstat(path):
st_ino = 0
st_dev = 0
if path.startswith(ABSTFN) and path != ABSTFN:
# ismount tries to read something inside the ABSTFN directory;
# simulate this being forbidden (no read permission).
raise OSError("Fake [Errno 13] Permission denied")
if path == ABSTFN:
st_dev = 1
st_ino = 1
return posix.stat_result((0, st_ino, st_dev, 0, 0, 0, 0, 0, 0, 0))
try:
os.lstat = fake_lstat
self.assertIs(posixpath.ismount(ABSTFN), True)
finally:
os.lstat = save_lstat
def test_expanduser(self): def test_expanduser(self):
self.assertEqual(posixpath.expanduser("foo"), "foo") self.assertEqual(posixpath.expanduser("foo"), "foo")
self.assertEqual(posixpath.expanduser(b"foo"), b"foo") self.assertEqual(posixpath.expanduser(b"foo"), b"foo")

View file

@ -1273,6 +1273,7 @@ Guido van Rossum
Just van Rossum Just van Rossum
Hugo van Rossum Hugo van Rossum
Saskia van Rossum Saskia van Rossum
Robin Roth
Clement Rouault Clement Rouault
Donald Wallace Rouse II Donald Wallace Rouse II
Liam Routt Liam Routt

View file

@ -76,6 +76,9 @@ Core and Builtins
Library Library
------- -------
- Issue #2466: posixpath.ismount now correctly recognizes mount points which
the user does not have permission to access.
- Issue #25958: Support "anti-registration" of special methods from - Issue #25958: Support "anti-registration" of special methods from
various ABCs, like __hash__, __iter__ or __len__. All these (and various ABCs, like __hash__, __iter__ or __len__. All these (and
several more) can be set to None in an implementation class and the several more) can be set to None in an implementation class and the