Commit 750018b9 authored by R David Murray's avatar R David Murray

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

Patch by Robin Roth, reviewed by Serhiy Storchaka, comment wording
tweaked by me.
parent eec9331b
......@@ -193,6 +193,7 @@ def ismount(path):
parent = join(path, b'..')
else:
parent = join(path, '..')
parent = realpath(parent)
try:
s2 = os.lstat(parent)
except OSError:
......
import itertools
import os
import posixpath
import sys
import unittest
import warnings
from posixpath import realpath, abspath, dirname, basename
......@@ -213,6 +211,28 @@ class PosixPathTest(unittest.TestCase):
finally:
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):
self.assertEqual(posixpath.expanduser("foo"), "foo")
self.assertEqual(posixpath.expanduser(b"foo"), b"foo")
......
......@@ -1258,6 +1258,7 @@ Guido van Rossum
Just van Rossum
Hugo van Rossum
Saskia van Rossum
Robin Roth
Clement Rouault
Donald Wallace Rouse II
Liam Routt
......
......@@ -38,6 +38,9 @@ Core and Builtins
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 #26750: unittest.mock.create_autospec() now works properly for
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment