diff options
| author | Luca Casonato <hello@lcas.dev> | 2022-06-26 00:13:24 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-26 00:13:24 +0200 |
| commit | 8d82ba729937baf83011354242cabc3d50c13dc2 (patch) | |
| tree | 3e8c4d87986338639eeef4a76543e4335020262c /serde_v8 | |
| parent | 38505db39137f33bfdb942658ea892a617ac0980 (diff) | |
build: require safety comments on unsafe code (#13870)
Co-authored-by: Bartek IwaĆczuk <biwanczuk@gmail.com>
Co-authored-by: Divy Srivastava <dj.srivastava23@gmail.com>
Diffstat (limited to 'serde_v8')
| -rw-r--r-- | serde_v8/examples/basic.rs | 2 | ||||
| -rw-r--r-- | serde_v8/magic/rawbytes.rs | 2 | ||||
| -rw-r--r-- | serde_v8/serializable.rs | 2 | ||||
| -rw-r--r-- | serde_v8/utils.rs | 1 |
4 files changed, 7 insertions, 0 deletions
diff --git a/serde_v8/examples/basic.rs b/serde_v8/examples/basic.rs index 81a8e6e6c..8f19e9405 100644 --- a/serde_v8/examples/basic.rs +++ b/serde_v8/examples/basic.rs @@ -52,6 +52,8 @@ fn main() { println!("x = {}", x); } + // SAFETY: all isolates have been destroyed, so we can now safely let V8 clean + // up its resources. unsafe { v8::V8::dispose(); } diff --git a/serde_v8/magic/rawbytes.rs b/serde_v8/magic/rawbytes.rs index d82e68717..2189ebfc3 100644 --- a/serde_v8/magic/rawbytes.rs +++ b/serde_v8/magic/rawbytes.rs @@ -87,8 +87,10 @@ mod tests { #[test] fn bytes_layout() { + // SAFETY: ensuring layout is the same let u1: [usize; 4] = unsafe { mem::transmute(from_static(HELLO.as_bytes())) }; + // SAFETY: ensuring layout is the same let u2: [usize; 4] = unsafe { mem::transmute(bytes::Bytes::from_static(HELLO.as_bytes())) }; assert_eq!(u1[..3], u2[..3]); // Struct bytes are equal besides Vtables diff --git a/serde_v8/serializable.rs b/serde_v8/serializable.rs index a724f300e..abde544c7 100644 --- a/serde_v8/serializable.rs +++ b/serde_v8/serializable.rs @@ -97,6 +97,8 @@ impl<T: serde::Serialize + 'static> From<T> for SerializablePkg { fn from(x: T) -> Self { #[inline(always)] fn tc<T, U>(src: T) -> U { + // SAFETY: the caller has ensured via the TypeId that the T and U types + // are the same. let x = unsafe { transmute_copy(&src) }; std::mem::forget(src); x diff --git a/serde_v8/utils.rs b/serde_v8/utils.rs index 427ac5f2f..d491ac093 100644 --- a/serde_v8/utils.rs +++ b/serde_v8/utils.rs @@ -17,6 +17,7 @@ pub fn v8_init() { } pub fn v8_shutdown() { + // SAFETY: this is safe, because all isolates have been shut down already. unsafe { v8::V8::dispose(); } |
