Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix potential soundness hole in version comparison #1358

Merged
merged 16 commits into from
Nov 15, 2022
Merged

Fix potential soundness hole in version comparison #1358

merged 16 commits into from
Nov 15, 2022

Conversation

hannobraun
Copy link
Owner

From one of the commit messages:

Going over the relevant parts of the standard library documentation with a fine comb, I realized that a pointer casted from a reference is only valid, if only raw pointers are used to access that memory.[1]

I don't know if this carries over to the pointer returned by str::as_ptr, but if it does, this could have indeed been a soundness hole, as the original str is still used, in fj-app's args module.

This could be the fix required for #1307, but having no access to Windows, I cannot be sure.

This guarantees that a `RawVersion` can't be constructed from outside of
its module, allowing its methods to make more assumptions about its
fields. The benefits of this aren't realized yet.
There was no `Version`, so need for a prefix to distinguish this struct
from anything else. Any raw-ness that is inherent to it is an
implementation detail, and doesn't' need to be reflected in the name.
This is needed to be able to pass a `String` to `#[command]` attributes
`version` parameter, which I'm about to do.
Store `Version` in the version `static`s, instead of storing a `&'static
str` there and converting the version from that.

Going over the relevant parts of the standard library documentation with
a fine comb, I realized that a pointer casted from a reference is only
valid, if only raw pointers are used to access that memory.[1]

I don't know if this carries over to the pointer returned by
`str::as_ptr`, but if it does, this could have indeed been a soundness
hole, as the original `str` is still used, in `fj-app`'s `args` module.

[1]: https://doc.rust-lang.org/std/ptr/index.html#safety
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant