Open WaffleLapkin opened 4 years ago
Register trait allows reading and writing any pointer in safe code which is unsound.
Register
Example:
use ruduino::Register; struct Unsound; impl Register for Unsound { type T = u8; const ADDRESS: *mut Self::T = core::ptr::null_mut(); // default implementations of `write`, `read`, `set_musk_raw`, `toggle_raw`, // `is_mask_set_raw` and `is_clear_raw` dereference `Self::ADDRESS` // (other methods also depend on them) } fn main() { println!("{}", Unsound::read()); }
(for me in debug it produces Process finished with exit code 139 (interrupted by signal 11: SIGSEGV) and in the release mode it prints 0)
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
0
Possible solutions:
unsafe
Yeah that should definitely be an unsafe trait. Maybe also sealed as no one should be able to implement it out of the library.
Register
trait allows reading and writing any pointer in safe code which is unsound.Example:
(for me in debug it produces
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
and in the release mode it prints0
)Possible solutions:
Register
traitunsafe