Make it harder to forge Throw
tokens
#797
Merged
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 PR makes it harder (though not technically impossible) to forge
Throw
tokens. We already have safety mechanisms in place in case of forgedThrow
tokens, leading to well-defined panics (as opposed to something unsafe, like undefined behavior). But this should help prevent programs from accidentally saving and reusing aThrow
token.There is also a test case that still does show how it's technically possible to forge a token, and demonstrates that it still has predictable behavior.
An alternative that would be even safer would be to place a lifetime on a
Throw
token, making it impossible to store them in long-lived storage. But this would leak into the type signatures of e.g.NeonResult
and APIs that use it, which would add a lot of complexity to Neon for little value. The panic is for a rare enough case that the extra type safety wouldn't be worth it IMO.One more change I want to make in this PR is to add
!Send
phantom data to theThrow
type so that it can't be shared outside of its thread.