Skip to content

Commit aa4ec74

Browse files
oslfmtsmoelius
authored andcommitted
finalize tests for type-cosplay
1 parent 5ef81d8 commit aa4ec74

File tree

14 files changed

+130
-1819
lines changed

14 files changed

+130
-1819
lines changed

lints/type_cosplay/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ path = "ui/recommended/src/lib.rs"
2929
name = "secure"
3030
path = "ui/secure/src/lib.rs"
3131

32+
[[example]]
33+
name = "secure-2"
34+
path = "ui/secure-2/src/lib.rs"
35+
3236
[dependencies]
3337
clippy_utils = { git = "https://github.com/rust-lang/rust-clippy", rev = "0cb0f7636851f9fcc57085cf80197a2ef6db098f" }
3438
dylint_linting = "2.0.1"

lints/type_cosplay/notes.md renamed to lints/type_cosplay/NOTES.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,10 @@ Two circumstances avoid the type cosplay attack.
4646
Whenever we refer to a type, we refer to whether it was deserialized in the program, not
4747
to the type definition.
4848

49-
- single deserialized type; is enum => SECURE
50-
- single deserialized type; is not enum; has discriminant => SECURE
51-
- single deserialized type; is not enum; no discriminant => INSECURE (insecure)
52-
NOTE: do we really need to check if one is an enum?
53-
- multiple deserialized types; one is enum; all structs have discriminant => SECURE
54-
- multiple deserialized types; one is enum; some struct doesn't have discriminant => INSECURE
55-
- multiple deserialized types; multiple enums => INSECURE (insecure-2)
56-
- multiple deserialized types; no enums; all structs have discriminant => SECURE
57-
- multiple deserialized types; no enums; some struct doesn't have discriminant => INSECURE
49+
- single deserialized type-kind; is not enum; no discriminant => INSECURE (insecure)
50+
- single deserialized type-kind; is enum; multiple enums => INSECURE (insecure-2)
51+
- multiple deserialized type-kinds => INSECURE (insecure-3)
52+
- single deserialized type-kind; is not enum; has discriminant => SECURE (secure)
53+
- single deserialized type-kind; is enum; single enum => SECURE* (secure-2)
54+
55+
*caveat: if the program defines another identical enum, but never uses it, could be a vulnerability

lints/type_cosplay/src/lib.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ impl<'tcx> LateLintPass<'tcx> for TypeCosplay {
9393
cx,
9494
TYPE_COSPLAY,
9595
spans[0],
96-
"Deserializing from multiple ADT types.",
96+
"Deserializing from different ADT types.",
9797
Some(spans[1]),
9898
"help: deserialize from only structs with a discriminant, or an enum encapsulating all structs."
9999
)
@@ -191,11 +191,16 @@ fn insecure_3() {
191191
}
192192

193193
#[test]
194-
fn recommended() {
195-
dylint_testing::ui_test_example(env!("CARGO_PKG_NAME"), "recommended");
194+
fn secure() {
195+
dylint_testing::ui_test_example(env!("CARGO_PKG_NAME"), "secure");
196196
}
197197

198198
#[test]
199-
fn secure() {
200-
dylint_testing::ui_test_example(env!("CARGO_PKG_NAME"), "secure");
199+
fn secure_two() {
200+
dylint_testing::ui_test_example(env!("CARGO_PKG_NAME"), "secure-2");
201+
}
202+
203+
#[test]
204+
fn recommended() {
205+
dylint_testing::ui_test_example(env!("CARGO_PKG_NAME"), "recommended");
201206
}

0 commit comments

Comments
 (0)