Skip to content

Commit 60c647b

Browse files
committed
Fix bug: allow no- '_'-split binary format string, add test
1 parent 79e70cc commit 60c647b

4 files changed

+17
-4
lines changed

clippy_lints/src/non_octal_unix_permissions.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,15 @@ fn check_binary_unix_permissions(lit_kind: &LitKind, snip: &str) -> bool {
5050

5151
let group_sizes: Vec<usize> = num_lit.integer.split('_').map(str::len).collect();
5252
// check whether is binary format unix permissions
53-
if group_sizes.len() != 3 && group_sizes.len() != 4 {
54-
return false;
53+
if group_sizes.len() == 1 && (num_lit.integer.len() == 9 || num_lit.integer.len() == 12) {
54+
// 0bxxxxxxxxx or 0bxxxxxxxxxxxx
55+
true
56+
} else if group_sizes.len() == 3 || group_sizes.len() == 4 {
57+
// 0bxxx_xxx_xxx or 0bxxx_xxx_xxx_xxx
58+
group_sizes.iter().all(|len| *len == 3)
59+
} else {
60+
false
5561
}
56-
group_sizes.iter().all(|len| *len == 3)
5762
} else {
5863
false
5964
}

tests/ui/non_octal_unix_permissions.fixed

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@ fn main() {
2525

2626
permissions.set_mode(0o644);
2727
permissions.set_mode(0o704);
28+
// no error
29+
permissions.set_mode(0b111_000_100);
2830

2931
// DirBuilderExt::mode
3032
let mut builder = DirBuilder::new();
3133
builder.mode(0o755);
3234
builder.mode(0o406);
35+
// no error
36+
permissions.set_mode(0b111000100);
3337
}

tests/ui/non_octal_unix_permissions.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@ fn main() {
2525

2626
permissions.set_mode(644);
2727
permissions.set_mode(0o704);
28+
// no error
29+
permissions.set_mode(0b111_000_100);
2830

2931
// DirBuilderExt::mode
3032
let mut builder = DirBuilder::new();
3133
builder.mode(755);
3234
builder.mode(0o406);
35+
// no error
36+
permissions.set_mode(0b111000100);
3337
}

tests/ui/non_octal_unix_permissions.stderr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ LL | permissions.set_mode(644);
2020
| ^^^ help: consider using an octal literal instead: `0o644`
2121

2222
error: using a non-octal value to set unix file permissions
23-
--> $DIR/non_octal_unix_permissions.rs:31:18
23+
--> $DIR/non_octal_unix_permissions.rs:33:18
2424
|
2525
LL | builder.mode(755);
2626
| ^^^ help: consider using an octal literal instead: `0o755`

0 commit comments

Comments
 (0)