From e3c7224142bff60635157e36c2cce91782b4aaeb Mon Sep 17 00:00:00 2001 From: Kenny Kerr Date: Fri, 24 May 2024 10:44:38 -0500 Subject: [PATCH] E_POINTER --- crates/libs/core/src/inspectable.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/libs/core/src/inspectable.rs b/crates/libs/core/src/inspectable.rs index bd61b95e1e..44cefe4beb 100644 --- a/crates/libs/core/src/inspectable.rs +++ b/crates/libs/core/src/inspectable.rs @@ -56,6 +56,9 @@ impl RuntimeName for IInspectable {} impl IInspectable_Vtbl { pub const fn new() -> Self { unsafe extern "system" fn GetIids(_: *mut c_void, count: *mut u32, values: *mut *mut GUID) -> HRESULT { + if count.is_null() || values.is_null() { + return imp::E_POINTER; + } // Note: even if we end up implementing this in future, it still doesn't need a this pointer // since the data to be returned is type- not instance-specific so can be shared for all // interfaces. @@ -64,11 +67,17 @@ impl IInspectable_Vtbl { HRESULT(0) } unsafe extern "system" fn GetRuntimeClassName(_: *mut c_void, value: *mut *mut c_void) -> HRESULT { + if value.is_null() { + return imp::E_POINTER; + } let h: HSTRING = T::NAME.into(); // TODO: should be try_into *value = transmute::(h); HRESULT(0) } unsafe extern "system" fn GetTrustLevel(this: *mut c_void, value: *mut i32) -> HRESULT { + if value.is_null() { + return imp::E_POINTER; + } let this = (this as *mut *mut c_void).offset(OFFSET) as *mut T; (*this).GetTrustLevel(value) }