Skip to content

Commit f5090b5

Browse files
Ahmed Abdelraoofoddcoder
authored andcommitted
Add test for failing macros on enum variants
It would have been security risk similar to #1 if that was accepted, but it is not. closes #5 Signed-off-by: Ahmed Abdelraoof <ahmed.abdelraoof@huawei.com>
1 parent 80111df commit f5090b5

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

safe-discriminant-derive/src/lib.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,12 @@ pub fn repr(_: TokenStream, item: TokenStream) -> TokenStream {
155155
pub fn do_nothing(_: TokenStream, item: TokenStream) -> TokenStream {
156156
item
157157
}
158+
159+
#[cfg(feature = "test-utils")]
160+
/// This macro will remove the discriminant of any enum field it is applied to
161+
#[proc_macro_attribute]
162+
pub fn remove_disc(_: TokenStream, item: TokenStream) -> TokenStream {
163+
let mut variant = parse_macro_input!(item as Variant);
164+
variant.discriminant = None;
165+
quote!(#variant).into()
166+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
use safe_discriminant::Discriminant;
2+
use safe_discriminant_derive::remove_disc;
3+
#[derive(Discriminant)]
4+
#[repr(u8)]
5+
pub enum Foo {
6+
#[remove_disc]
7+
A = 0,
8+
B = 1,
9+
}
10+
11+
fn main() {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
error: expected non-macro attribute, found attribute macro `remove_disc`
2+
--> tests/fail/remove_disc.rs:6:7
3+
|
4+
6 | #[remove_disc]
5+
| ^^^^^^^^^^^ not a non-macro attribute

0 commit comments

Comments
 (0)