Skip to content

Commit ab7c34a

Browse files
Fix stat.filemode pure Python file type detection
1 parent e66597d commit ab7c34a

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

Lib/stat.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,14 @@ def filemode(mode):
166166
perm = []
167167
for index, table in enumerate(_filemode_table):
168168
for bit, char in table:
169-
if mode & bit == bit:
170-
perm.append(char)
171-
break
169+
if index == 0:
170+
if (mode & S_IFMT) == bit:
171+
perm.append(char)
172+
break
173+
else:
174+
if mode & bit == bit:
175+
perm.append(char)
176+
break
172177
else:
173178
if index == 0:
174179
# Unknown filetype

Lib/test/test_stat.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ def test_mode(self):
163163
self.statmod.S_IFREG)
164164
self.assertEqual(self.statmod.S_IMODE(st_mode), 0o666)
165165

166+
def test_filemode_does_not_misclassify_random_bits(self):
167+
# gh-144050 regression test
168+
self.assertEqual(self.statmod.filemode(32767)[0], "?")
169+
166170
@os_helper.skip_unless_working_chmod
167171
def test_directory(self):
168172
os.mkdir(TESTFN)

0 commit comments

Comments
 (0)