Replace MemCase's unsound impl of Deref/AsMut with a borrow() method #55
+111
−99
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This code compiled fine, but raised a segfault on the last println:
This is because the
Deref
implementation ofMemCase<&[u64]>
effectively yields a&&'static [u64]
which can itself be dereferenced to a&'static [u64]
, which outlives theMemCase
.There does not seem to be a way to implement
Deref
orAsRef
(orstd::borrow::Borrow
) without yielding some sort of'static
here. So as far as I can tell, we have to take this ergonomic blow in order to avoid segfaults that are very easy for users to trigger unknowingly.Resolves #54