From 74770c8561061483e749caf7256f0301aa8f7234 Mon Sep 17 00:00:00 2001 From: Matthew Maurer Date: Mon, 27 Mar 2023 09:28:35 -0700 Subject: [PATCH] Do not automatically inject bounds (#879) Fixes #878 --- zeroize/derive/src/lib.rs | 16 +++------------- zeroize/tests/zeroize_derive.rs | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/zeroize/derive/src/lib.rs b/zeroize/derive/src/lib.rs index 650dacb6..215bd785 100644 --- a/zeroize/derive/src/lib.rs +++ b/zeroize/derive/src/lib.rs @@ -8,11 +8,10 @@ use proc_macro2::{Ident, TokenStream}; use quote::{format_ident, quote}; use syn::{ parse::{Parse, ParseStream}, - parse_quote, punctuated::Punctuated, token::Comma, - Attribute, Data, DeriveInput, Expr, ExprLit, Field, Fields, GenericParam, Lit, Meta, Result, - Variant, WherePredicate, + Attribute, Data, DeriveInput, Expr, ExprLit, Field, Fields, Lit, Meta, Result, Variant, + WherePredicate, }; /// Name of zeroize-related attributes @@ -39,16 +38,7 @@ fn derive_zeroize_impl(input: DeriveInput) -> TokenStream { let extra_bounds = match attributes.bound { Some(bounds) => bounds.0, - None => { - let mut out: Punctuated = Default::default(); - for param in &input.generics.params { - if let GenericParam::Type(type_param) = param { - let type_name = &type_param.ident; - out.push(parse_quote! { #type_name: Zeroize }) - } - } - out - } + None => Default::default(), }; let mut generics = input.generics.clone(); diff --git a/zeroize/tests/zeroize_derive.rs b/zeroize/tests/zeroize_derive.rs index 96c10c32..1277cc55 100644 --- a/zeroize/tests/zeroize_derive.rs +++ b/zeroize/tests/zeroize_derive.rs @@ -325,3 +325,29 @@ fn derive_zeroize_on_drop_generic() { #[derive(ZeroizeOnDrop)] struct Z(Vec); } + +#[test] +fn derive_zeroize_unused_param() { + #[derive(Zeroize)] + struct Z { + arr: [u32; 5], + #[zeroize(skip)] + skipped: T, + } +} + +#[test] +// Issue #878 +fn derive_zeroize_with_marker() { + #[derive(ZeroizeOnDrop, Zeroize)] + struct Test { + #[zeroize(skip)] + field: Option, + } + + trait Secret: ZeroizeOnDrop + Zeroize {} + + impl Secret for Test {} + + trait Marker {} +}