Skip to content

Commit 44bed6e

Browse files
authored
Fix double mut on AssertZeroizeOnDrop (#719)
1 parent 73ad6a6 commit 44bed6e

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

zeroize/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,11 @@ pub mod __internal {
268268

269269
/// Auto-deref workaround for deriving `ZeroizeOnDrop`.
270270
pub trait AssertZeroizeOnDrop {
271-
fn zeroize_or_on_drop(&mut self);
271+
fn zeroize_or_on_drop(self);
272272
}
273273

274274
impl<T: ZeroizeOnDrop> AssertZeroizeOnDrop for &mut T {
275-
fn zeroize_or_on_drop(&mut self) {}
275+
fn zeroize_or_on_drop(self) {}
276276
}
277277

278278
/// Auto-deref workaround for deriving `ZeroizeOnDrop`.

zeroize/tests/zeroize_derive.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,4 +240,19 @@ mod custom_derive_tests {
240240

241241
assert_eq!(value.0, 0);
242242
}
243+
244+
#[test]
245+
fn derive_only_zeroize_on_drop() {
246+
#[derive(ZeroizeOnDrop)]
247+
struct X([u8; 3]);
248+
249+
#[derive(ZeroizeOnDrop)]
250+
struct Z(X);
251+
252+
let mut value = Z(X([1, 2, 3]));
253+
unsafe {
254+
std::ptr::drop_in_place(&mut value);
255+
}
256+
assert_eq!(&value.0 .0, &[0, 0, 0])
257+
}
243258
}

0 commit comments

Comments
 (0)