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

Patch by Robin Roth, reviewed by Serhiy Storchaka, comment wording
tweaked by me.
This commit is contained in:
R David Murray 2016-08-18 21:27:48 -04:00
parent eec9331b20
commit 750018b91a
4 changed files with 27 additions and 2 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

@ -1,7 +1,5 @@
import itertools
import os import os
import posixpath import posixpath
import sys
import unittest import unittest
import warnings import warnings
from posixpath import realpath, abspath, dirname, basename from posixpath import realpath, abspath, dirname, basename
@ -213,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

@ -1258,6 +1258,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

@ -38,6 +38,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 #27773: Correct some memory management errors server_hostname in _ssl.wrap_socket(). - Issue #27773: Correct some memory management errors server_hostname in _ssl.wrap_socket().
- Issue #26750: unittest.mock.create_autospec() now works properly for - Issue #26750: unittest.mock.create_autospec() now works properly for