#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:
parent
eec9331b20
commit
750018b91a
|
@ -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:
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue