diff --git a/zeroize/src/lib.rs b/zeroize/src/lib.rs index 58dc4d94..b9a143b1 100644 --- a/zeroize/src/lib.rs +++ b/zeroize/src/lib.rs @@ -268,11 +268,11 @@ pub mod __internal { /// Auto-deref workaround for deriving `ZeroizeOnDrop`. pub trait AssertZeroizeOnDrop { - fn zeroize_or_on_drop(&mut self); + fn zeroize_or_on_drop(self); } impl AssertZeroizeOnDrop for &mut T { - fn zeroize_or_on_drop(&mut self) {} + fn zeroize_or_on_drop(self) {} } /// Auto-deref workaround for deriving `ZeroizeOnDrop`. diff --git a/zeroize/tests/zeroize_derive.rs b/zeroize/tests/zeroize_derive.rs index 8ef60a87..1e9e12ac 100644 --- a/zeroize/tests/zeroize_derive.rs +++ b/zeroize/tests/zeroize_derive.rs @@ -240,4 +240,19 @@ mod custom_derive_tests { assert_eq!(value.0, 0); } + + #[test] + fn derive_only_zeroize_on_drop() { + #[derive(ZeroizeOnDrop)] + struct X([u8; 3]); + + #[derive(ZeroizeOnDrop)] + struct Z(X); + + let mut value = Z(X([1, 2, 3])); + unsafe { + std::ptr::drop_in_place(&mut value); + } + assert_eq!(&value.0 .0, &[0, 0, 0]) + } }