From 2b13a0e6617fd763e57eda64da80edcdbc554132 Mon Sep 17 00:00:00 2001 From: dAxpeDDa Date: Thu, 27 Jan 2022 14:58:54 +0100 Subject: [PATCH] Fix double `mut` on `AssertZeroizeOnDrop` --- zeroize/src/lib.rs | 4 ++-- zeroize/tests/zeroize_derive.rs | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) 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]) + } }