Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork34k
Description
Bug report
Bug description:
We found a behavioral discrepancy between CPython and PyPy instat.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 instat.filemode(mode)
Reproduction
importstatprint(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.
Itspure-Python implementation instead checks:(mode & S_IFBLK) == S_IFBLK. This check incorrectly evaluatestrue for32767, causing Python implementation (which in turn affects PyPy) to misclassify the mode as ablock device, yielding the wrong prefixb.
CPython versions tested on:
3.11
Operating systems tested on:
Linux