Skip to content

Commit

Permalink
Ensure DeviceLostClosureC callbacks have null-terminated message stri…
Browse files Browse the repository at this point in the history
…ngs. (#4744)
  • Loading branch information
bradwerth authored Nov 22, 2023
1 parent 30d67a3 commit 877dd5b
Showing 1 changed file with 4 additions and 8 deletions.
12 changes: 4 additions & 8 deletions wgpu-core/src/device/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,19 +273,15 @@ impl DeviceLostClosure {
}
}

#[allow(trivial_casts)]
pub(crate) fn call(self, reason: DeviceLostReason, message: String) {
match self.inner {
DeviceLostClosureInner::Rust { callback } => callback(reason, message),
// SAFETY: the contract of the call to from_c says that this unsafe is sound.
DeviceLostClosureInner::C { inner } => unsafe {
// We need to pass message as a c_char typed pointer. To avoid trivial
// conversion warnings on some platforms, we use the allow lint.
(inner.callback)(
inner.user_data,
reason as u8,
message.as_ptr() as *const c_char,
)
// Ensure message is structured as a null-terminated C string. It only
// needs to live as long as the callback invocation.
let message = std::ffi::CString::new(message).unwrap();
(inner.callback)(inner.user_data, reason as u8, message.as_ptr())
},
}
}
Expand Down

0 comments on commit 877dd5b

Please sign in to comment.