Skip to content

Commit 8e2e853

Browse files
committed
Add safety notice for unsafe binding functions
1 parent 5258540 commit 8e2e853

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

bindings_generator/src/methods.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -348,10 +348,15 @@ pub(crate) fn generate_methods(
348348

349349
let rusty_name = format_ident!("{}", rusty_method_name);
350350

351-
let maybe_unsafe = if UNSAFE_OBJECT_METHODS.contains(&(&class.name, method_name)) {
352-
quote! { unsafe }
351+
let maybe_unsafe: TokenStream;
352+
let maybe_unsafe_reason: &str;
353+
if UNSAFE_OBJECT_METHODS.contains(&(&class.name, method_name)) {
354+
maybe_unsafe = quote! { unsafe };
355+
maybe_unsafe_reason = "\n# Safety\nThis function bypasses Rust's static type checks \
356+
(aliasing, thread boundaries, calls to free(), ...).";
353357
} else {
354-
Default::default()
358+
maybe_unsafe = TokenStream::default();
359+
maybe_unsafe_reason = "";
355360
};
356361

357362
let method_bind_fetch = {
@@ -370,8 +375,8 @@ pub(crate) fn generate_methods(
370375
let recover = ret_recover(&ret_type, icall_ty);
371376

372377
let output = quote! {
373-
374378
#[doc = #doc_comment]
379+
#[doc = #maybe_unsafe_reason]
375380
#[inline]
376381
pub #maybe_unsafe fn #rusty_name(&self #params_decl) -> #rust_ret_type {
377382
unsafe {

0 commit comments

Comments
 (0)