Skip to content

Commit 081ab49

Browse files
committed
Rust: Add barrier for fieldless enum types
1 parent 6050a0e commit 081ab49

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

rust/ql/lib/codeql/rust/internal/Type.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ class EnumType extends Type, TEnum {
140140

141141
EnumType() { this = TEnum(enum) }
142142

143+
/** Gets the enum that this enum type represents. */
144+
Enum getEnum() { result = enum }
145+
143146
override TypeParameter getPositionalTypeParameter(int i) {
144147
result = TTypeParamTypeParameter(enum.getGenericParamList().getTypeParam(i))
145148
}

rust/ql/lib/codeql/rust/security/Barriers.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ class IntegralTypeBarrier extends DataFlow::Node {
3434
}
3535
}
3636

37+
/** A node whose type is a fieldless enum. */
38+
class FieldlessEnumTypeBarrier extends DataFlow::Node {
39+
FieldlessEnumTypeBarrier() {
40+
TypeInference::inferType(this.asExpr()).(EnumType).getEnum().isFieldless()
41+
}
42+
}
43+
3744
/**
3845
* Holds if guard expression `g` having result `branch` indicates that the
3946
* sub-expression `e` is not null. For example when `ptr.is_null()` is

0 commit comments

Comments
 (0)