Skip to content

Commit e018d41

Browse files
authored
Further constrain transforming array parameters to avoid potentially polymorphic types (#2046)
1 parent dd244b5 commit e018d41

File tree

96 files changed

+2541
-3003
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+2541
-3003
lines changed

crates/libs/metadata/src/reader/mod.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -541,15 +541,6 @@ impl<'a> Reader<'a> {
541541
})
542542
.collect();
543543

544-
// Remove any byte arrays that aren't byte-sized types.
545-
for param in &mut params {
546-
if let ArrayInfo::RelativeByteLen(_) = param.array_info {
547-
if !param.ty.is_byte_size() {
548-
param.array_info = ArrayInfo::None
549-
}
550-
}
551-
}
552-
553544
for position in 0..params.len() {
554545
// Point len params back to the corresponding ptr params.
555546
match params[position].array_info {
@@ -592,6 +583,16 @@ impl<'a> Reader<'a> {
592583
}
593584
}
594585

586+
// Remove any byte arrays that aren't byte-sized types.
587+
for position in 0..params.len() {
588+
if let ArrayInfo::RelativeByteLen(relative) = params[position].array_info {
589+
if !params[position].ty.is_byte_size() {
590+
params[position].array_info = ArrayInfo::None;
591+
params[relative].array_info = ArrayInfo::None;
592+
}
593+
}
594+
}
595+
595596
Signature { def: row, params, return_type }
596597
}
597598
pub fn method_def_extern_abi(&self, def: MethodDef) -> &'static str {

crates/libs/metadata/src/reader/type.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl Type {
137137
pub fn is_byte_size(&self) -> bool {
138138
match self {
139139
Type::ConstPtr((kind, _)) | Type::MutPtr((kind, _)) => kind.is_byte_size(),
140-
Type::I8 | Type::U8 | Type::Void | Type::PSTR | Type::PCSTR => true,
140+
Type::I8 | Type::U8 | Type::PSTR | Type::PCSTR => true,
141141
_ => false,
142142
}
143143
}

crates/libs/windows/src/Windows/Win32/AI/MachineLearning/DirectML/mod.rs

Lines changed: 26 additions & 26 deletions
Large diffs are not rendered by default.

crates/libs/windows/src/Windows/Win32/Devices/AllJoyn/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,28 +196,28 @@ where
196196
#[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`, `\"Win32_Foundation\"`*"]
197197
#[cfg(feature = "Win32_Foundation")]
198198
#[inline]
199-
pub unsafe fn AllJoynReceiveFromBus<'a, P0>(connectedbushandle: P0, buffer: ::core::option::Option<&mut [u8]>, bytestransferred: ::core::option::Option<*mut u32>, reserved: *mut ::core::ffi::c_void) -> super::super::Foundation::BOOL
199+
pub unsafe fn AllJoynReceiveFromBus<'a, P0>(connectedbushandle: P0, buffer: ::core::option::Option<*mut ::core::ffi::c_void>, bytestoread: u32, bytestransferred: ::core::option::Option<*mut u32>, reserved: *mut ::core::ffi::c_void) -> super::super::Foundation::BOOL
200200
where
201201
P0: ::std::convert::Into<super::super::Foundation::HANDLE>,
202202
{
203203
#[cfg_attr(windows, link(name = "windows"))]
204204
extern "system" {
205205
fn AllJoynReceiveFromBus(connectedbushandle: super::super::Foundation::HANDLE, buffer: *mut ::core::ffi::c_void, bytestoread: u32, bytestransferred: *mut u32, reserved: *mut ::core::ffi::c_void) -> super::super::Foundation::BOOL;
206206
}
207-
AllJoynReceiveFromBus(connectedbushandle.into(), ::core::mem::transmute(buffer.as_deref().map_or(::core::ptr::null(), |slice| slice.as_ptr())), buffer.as_deref().map_or(0, |slice| slice.len() as _), ::core::mem::transmute(bytestransferred.unwrap_or(::std::ptr::null_mut())), ::core::mem::transmute(reserved))
207+
AllJoynReceiveFromBus(connectedbushandle.into(), ::core::mem::transmute(buffer.unwrap_or(::std::ptr::null_mut())), bytestoread, ::core::mem::transmute(bytestransferred.unwrap_or(::std::ptr::null_mut())), ::core::mem::transmute(reserved))
208208
}
209209
#[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`, `\"Win32_Foundation\"`*"]
210210
#[cfg(feature = "Win32_Foundation")]
211211
#[inline]
212-
pub unsafe fn AllJoynSendToBus<'a, P0>(connectedbushandle: P0, buffer: ::core::option::Option<&[u8]>, bytestransferred: ::core::option::Option<*mut u32>, reserved: *mut ::core::ffi::c_void) -> super::super::Foundation::BOOL
212+
pub unsafe fn AllJoynSendToBus<'a, P0>(connectedbushandle: P0, buffer: ::core::option::Option<*const ::core::ffi::c_void>, bytestowrite: u32, bytestransferred: ::core::option::Option<*mut u32>, reserved: *mut ::core::ffi::c_void) -> super::super::Foundation::BOOL
213213
where
214214
P0: ::std::convert::Into<super::super::Foundation::HANDLE>,
215215
{
216216
#[cfg_attr(windows, link(name = "windows"))]
217217
extern "system" {
218218
fn AllJoynSendToBus(connectedbushandle: super::super::Foundation::HANDLE, buffer: *const ::core::ffi::c_void, bytestowrite: u32, bytestransferred: *mut u32, reserved: *mut ::core::ffi::c_void) -> super::super::Foundation::BOOL;
219219
}
220-
AllJoynSendToBus(connectedbushandle.into(), ::core::mem::transmute(buffer.as_deref().map_or(::core::ptr::null(), |slice| slice.as_ptr())), buffer.as_deref().map_or(0, |slice| slice.len() as _), ::core::mem::transmute(bytestransferred.unwrap_or(::std::ptr::null_mut())), ::core::mem::transmute(reserved))
220+
AllJoynSendToBus(connectedbushandle.into(), ::core::mem::transmute(buffer.unwrap_or(::std::ptr::null())), bytestowrite, ::core::mem::transmute(bytestransferred.unwrap_or(::std::ptr::null_mut())), ::core::mem::transmute(reserved))
221221
}
222222
#[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"]
223223
#[inline]

crates/libs/windows/src/Windows/Win32/Devices/BiometricFramework/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -449,12 +449,12 @@ pub unsafe fn WinBioSetCredential(r#type: WINBIO_CREDENTIAL_TYPE, credential: &[
449449
}
450450
#[doc = "*Required features: `\"Win32_Devices_BiometricFramework\"`*"]
451451
#[inline]
452-
pub unsafe fn WinBioSetProperty(sessionhandle: u32, propertytype: u32, propertyid: u32, unitid: u32, identity: ::core::option::Option<*const WINBIO_IDENTITY>, subfactor: u8, propertybuffer: &[u8]) -> ::windows::core::Result<()> {
452+
pub unsafe fn WinBioSetProperty(sessionhandle: u32, propertytype: u32, propertyid: u32, unitid: u32, identity: ::core::option::Option<*const WINBIO_IDENTITY>, subfactor: u8, propertybuffer: *const ::core::ffi::c_void, propertybuffersize: usize) -> ::windows::core::Result<()> {
453453
#[cfg_attr(windows, link(name = "windows"))]
454454
extern "system" {
455455
fn WinBioSetProperty(sessionhandle: u32, propertytype: u32, propertyid: u32, unitid: u32, identity: *const WINBIO_IDENTITY, subfactor: u8, propertybuffer: *const ::core::ffi::c_void, propertybuffersize: usize) -> ::windows::core::HRESULT;
456456
}
457-
WinBioSetProperty(sessionhandle, propertytype, propertyid, unitid, ::core::mem::transmute(identity.unwrap_or(::std::ptr::null())), subfactor, ::core::mem::transmute(propertybuffer.as_ptr()), propertybuffer.len() as _).ok()
457+
WinBioSetProperty(sessionhandle, propertytype, propertyid, unitid, ::core::mem::transmute(identity.unwrap_or(::std::ptr::null())), subfactor, ::core::mem::transmute(propertybuffer), propertybuffersize).ok()
458458
}
459459
#[doc = "*Required features: `\"Win32_Devices_BiometricFramework\"`*"]
460460
#[inline]

0 commit comments

Comments
 (0)