跳到内容

非八进制权限 (RUF064)

有时提供修复。

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

检查标准库函数中接受数字 mode 参数的情况,并传入了非八进制整数文字量。

为什么这不好?

数字模式由一到四个八进制数字组成。将非八进制整数转换为八进制可能不是作者想要的模式。

示例

os.chmod("foo", 644)

建议改为

os.chmod("foo", 0o644)

修复安全性

修复分为两类,第一类是看起来作者想要使用八进制文字量,但缺少 0o 前缀。

os.chmod("foo", 400)
os.chmod("foo", 644)

此类修复会更改运行时行为。在第一种情况下,400 对应于 0o620 (u=rw,g=w,o=)。由于这种模式不太可能,因此它被更改为 0o400 (u=r,go=)。同样,644 对应于 0o1204 (u=ws,g=,o=r),并被更改为 0o644 (u=rw,go=r)。

第二类是十进制文字量,它们被认为是可能有效的,但采用十进制形式。

os.chmod("foo", 256)
os.chmod("foo", 493)

256 对应于 0o400 (u=r,go=),493 对应于 0o755 (u=rwx,go=rx)。这两个修复程序都保持运行时行为不变。如果原始代码实际上打算使用 0o256 (u=w,g=rx,o=rw) 而不是 256,则不应接受此修复。

修复可用性

仅当整数文字量匹配一组常见模式时,修复才可用。