Skip to content

Commit f37bb41

Browse files
committed
Stop using zeroize::__internal
1 parent 5470b4f commit f37bb41

File tree

3 files changed

+97
-29
lines changed

3 files changed

+97
-29
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
- `no_drop` item-level option to `ZeroizeOnDrop` which does not implement
1212
`Drop` but instead only asserts that every field implements `ZeroizeOnDrop`.
1313

14+
### Fixed
15+
- Stop depending on unstable APIs of `zeroize` to implement `ZeroizeOnDrop`.
16+
1417
## [1.4.0] - 2025-05-01
1518

1619
### Added

src/test/zeroize.rs

Lines changed: 74 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,28 @@ fn drop() -> Result<()> {
5252
where T: ::zeroize::ZeroizeOnDrop
5353
{
5454
fn drop(&mut self) {
55-
use ::zeroize::__internal::AssertZeroize;
56-
use ::zeroize::__internal::AssertZeroizeOnDrop;
55+
trait AssertZeroizeOnDrop {
56+
fn __derive_where_zeroize_or_on_drop(self);
57+
}
58+
59+
impl<T: ::zeroize::ZeroizeOnDrop + ?::core::marker::Sized> AssertZeroizeOnDrop for &&mut T {
60+
fn __derive_where_zeroize_or_on_drop(self) {}
61+
}
62+
63+
trait AssertZeroize {
64+
fn __derive_where_zeroize_or_on_drop(&mut self);
65+
}
66+
67+
impl<T: ::zeroize::Zeroize + ?::core::marker::Sized> AssertZeroize for T {
68+
fn __derive_where_zeroize_or_on_drop(&mut self) {
69+
::zeroize::Zeroize::zeroize(self);
70+
}
71+
}
5772

5873
match self {
5974
Test(ref mut __field_0, ref mut __field_1) => {
60-
__field_0.zeroize_or_on_drop();
61-
__field_1.zeroize_or_on_drop();
75+
__field_0.__derive_where_zeroize_or_on_drop();
76+
__field_1.__derive_where_zeroize_or_on_drop();
6277
}
6378
}
6479
}
@@ -92,13 +107,28 @@ fn both() -> Result<()> {
92107
where T: ::zeroize::ZeroizeOnDrop
93108
{
94109
fn drop(&mut self) {
95-
use ::zeroize::__internal::AssertZeroize;
96-
use ::zeroize::__internal::AssertZeroizeOnDrop;
110+
trait AssertZeroizeOnDrop {
111+
fn __derive_where_zeroize_or_on_drop(self);
112+
}
113+
114+
impl<T: ::zeroize::ZeroizeOnDrop + ?::core::marker::Sized> AssertZeroizeOnDrop for &&mut T {
115+
fn __derive_where_zeroize_or_on_drop(self) {}
116+
}
117+
118+
trait AssertZeroize {
119+
fn __derive_where_zeroize_or_on_drop(&mut self);
120+
}
121+
122+
impl<T: ::zeroize::Zeroize + ?::core::marker::Sized> AssertZeroize for T {
123+
fn __derive_where_zeroize_or_on_drop(&mut self) {
124+
::zeroize::Zeroize::zeroize(self);
125+
}
126+
}
97127

98128
match self {
99129
Test(ref mut __field_0, ref mut __field_1) => {
100-
__field_0.zeroize_or_on_drop();
101-
__field_1.zeroize_or_on_drop();
130+
__field_0.__derive_where_zeroize_or_on_drop();
131+
__field_1.__derive_where_zeroize_or_on_drop();
102132
}
103133
}
104134
}
@@ -188,12 +218,27 @@ fn crate_drop() -> Result<()> {
188218
where T: zeroize_::ZeroizeOnDrop
189219
{
190220
fn drop(&mut self) {
191-
use zeroize_::__internal::AssertZeroize;
192-
use zeroize_::__internal::AssertZeroizeOnDrop;
221+
trait AssertZeroizeOnDrop {
222+
fn __derive_where_zeroize_or_on_drop(self);
223+
}
224+
225+
impl<T: zeroize_::ZeroizeOnDrop + ?::core::marker::Sized> AssertZeroizeOnDrop for &&mut T {
226+
fn __derive_where_zeroize_or_on_drop(self) {}
227+
}
228+
229+
trait AssertZeroize {
230+
fn __derive_where_zeroize_or_on_drop(&mut self);
231+
}
232+
233+
impl<T: zeroize_::Zeroize + ?::core::marker::Sized> AssertZeroize for T {
234+
fn __derive_where_zeroize_or_on_drop(&mut self) {
235+
zeroize_::Zeroize::zeroize(self);
236+
}
237+
}
193238

194239
match self {
195240
Test(ref mut __field_0) => {
196-
__field_0.zeroize_or_on_drop();
241+
__field_0.__derive_where_zeroize_or_on_drop();
197242
}
198243
}
199244
}
@@ -285,12 +330,27 @@ fn enum_skip_drop() -> Result<()> {
285330
#[automatically_derived]
286331
impl <T> ::core::ops::Drop for Test<T> {
287332
fn drop(&mut self) {
288-
use ::zeroize::__internal::AssertZeroize;
289-
use ::zeroize::__internal::AssertZeroizeOnDrop;
333+
trait AssertZeroizeOnDrop {
334+
fn __derive_where_zeroize_or_on_drop(self);
335+
}
336+
337+
impl<T: ::zeroize::ZeroizeOnDrop + ?::core::marker::Sized> AssertZeroizeOnDrop for &&mut T {
338+
fn __derive_where_zeroize_or_on_drop(self) {}
339+
}
340+
341+
trait AssertZeroize {
342+
fn __derive_where_zeroize_or_on_drop(&mut self);
343+
}
344+
345+
impl<T: ::zeroize::Zeroize + ?::core::marker::Sized> AssertZeroize for T {
346+
fn __derive_where_zeroize_or_on_drop(&mut self) {
347+
::zeroize::Zeroize::zeroize(self);
348+
}
349+
}
290350

291351
match self {
292352
Test::A(ref mut __field_0) => {
293-
__field_0.zeroize_or_on_drop();
353+
__field_0.__derive_where_zeroize_or_on_drop();
294354
}
295355
Test::B(ref mut __field_0) => { }
296356
}

src/trait_/zeroize_on_drop.rs

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -184,23 +184,28 @@ impl TraitImpl for ZeroizeOnDrop {
184184
}
185185
}
186186
} else {
187-
let crate_ = self.crate_();
188-
let internal = util::path_segment("__internal");
189-
190-
let mut assert_zeroize = crate_.clone();
191-
assert_zeroize
192-
.segments
193-
.extend([internal.clone(), util::path_segment("AssertZeroize")]);
194-
195-
let mut assert_zeroize_on_drop = crate_;
196-
assert_zeroize_on_drop
197-
.segments
198-
.extend([internal, util::path_segment("AssertZeroizeOnDrop")]);
187+
let zeroize = util::path_from_root_and_strs(self.crate_(), &["Zeroize"]);
188+
let zeroize_on_drop = self.path();
199189

200190
quote! {
201191
fn drop(&mut self) {
202-
use #assert_zeroize;
203-
use #assert_zeroize_on_drop;
192+
trait AssertZeroizeOnDrop {
193+
fn __derive_where_zeroize_or_on_drop(self);
194+
}
195+
196+
impl<T: #zeroize_on_drop + ?::core::marker::Sized> AssertZeroizeOnDrop for &&mut T {
197+
fn __derive_where_zeroize_or_on_drop(self) {}
198+
}
199+
200+
trait AssertZeroize {
201+
fn __derive_where_zeroize_or_on_drop(&mut self);
202+
}
203+
204+
impl<T: #zeroize + ?::core::marker::Sized> AssertZeroize for T {
205+
fn __derive_where_zeroize_or_on_drop(&mut self) {
206+
#zeroize::zeroize(self);
207+
}
208+
}
204209

205210
match self {
206211
#body
@@ -242,7 +247,7 @@ impl TraitImpl for ZeroizeOnDrop {
242247
} else {
243248
quote! {
244249
#self_pattern => {
245-
#(#self_ident.zeroize_or_on_drop();)*
250+
#(#self_ident.__derive_where_zeroize_or_on_drop();)*
246251
}
247252
}
248253
}

0 commit comments

Comments
 (0)