mirror of
https://github.com/python/cpython.git
synced 2026-01-22 07:08:40 +00:00
[3.14] gh-144050: Fix stat.filemode pure Python file type detection (GH-144059) (GH-144073)
(cherry picked from commit fe629262c0)
Co-authored-by: VanshAgarwal24036 <148854295+VanshAgarwal24036@users.noreply.github.com>
This commit is contained in:
parent
1cfb4192fe
commit
56cf72d626
3 changed files with 15 additions and 3 deletions
11
Lib/stat.py
11
Lib/stat.py
|
|
@ -166,9 +166,14 @@ def filemode(mode):
|
|||
perm = []
|
||||
for index, table in enumerate(_filemode_table):
|
||||
for bit, char in table:
|
||||
if mode & bit == bit:
|
||||
perm.append(char)
|
||||
break
|
||||
if index == 0:
|
||||
if S_IFMT(mode) == bit:
|
||||
perm.append(char)
|
||||
break
|
||||
else:
|
||||
if mode & bit == bit:
|
||||
perm.append(char)
|
||||
break
|
||||
else:
|
||||
if index == 0:
|
||||
# Unknown filetype
|
||||
|
|
|
|||
|
|
@ -163,6 +163,11 @@ def test_mode(self):
|
|||
self.statmod.S_IFREG)
|
||||
self.assertEqual(self.statmod.S_IMODE(st_mode), 0o666)
|
||||
|
||||
def test_filemode_does_not_misclassify_random_bits(self):
|
||||
# gh-144050 regression test
|
||||
self.assertEqual(self.statmod.filemode(0o77777)[0], "?")
|
||||
self.assertEqual(self.statmod.filemode(0o177777)[0], "?")
|
||||
|
||||
@os_helper.skip_unless_working_chmod
|
||||
def test_directory(self):
|
||||
os.mkdir(TESTFN)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
Fix :func:`stat.filemode` in the pure-Python implementation to avoid misclassifying
|
||||
invalid mode values as block devices.
|
||||
Loading…
Add table
Add a link
Reference in a new issue