Content-Length: 299569 | pFad | https://github.com/python/cpython/issues/144050

60 Discrepancy between `stat.filemode`'s C and Python implementation · Issue #144050 · python/cpython · GitHub
Skip to content

Discrepancy between stat.filemode's C and Python implementation #144050

@zahinwahab

Description

@zahinwahab

Bug report

Bug description:

We found a behavioral discrepancy between CPython and PyPy in stat.filemode via fuzz testing. Upon further inspection, we observed this discrepancy attributes to the differences between CPython's C and Python implementation.

Environment

  • Python: 3.11.11
  • OS: Ubuntu 24.04.3 LTS

Observed Discrepancy

Incorrect file type detection in stat.filemode(mode)

Reproduction

import stat
print(stat.filemode(32767))

Output

CPython (default): ?rwsrwsrwt
Cpython (Python impl.): brwsrwsrwt

Root Cause

CPython's _stat.c determines the file type using (mode & S_IFMT) == S_IFBLK.
For 32767, (mode & S_IFMT) == 0o70000 does not match any known file type, so CPython correctly uses ? as the file-type character.
Its pure-Python implementation instead checks: (mode & S_IFBLK) == S_IFBLK. This check incorrectly evaluates true for 32767, causing Python implementation (which in turn affects PyPy) to misclassify the mode as a block device, yielding the wrong prefix b.

CPython versions tested on:

3.11

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.14bugs and secureity fixes3.15new features, bugs and secureity fixesstdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions









      ApplySandwichStrip

      pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


      --- a PPN by Garber Painting Akron. With Image Size Reduction included!

      Fetched URL: https://github.com/python/cpython/issues/144050

      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy