Skip to content

Commit c4a48b3

Browse files
authored
Harden win32 array support to avoid conflicting metadata (#2035)
1 parent c23b003 commit c4a48b3

File tree

3 files changed

+24
-21
lines changed
  • crates/libs
    • bindgen/src
    • metadata/src/reader
    • windows/src/Windows/Win32/Networking/BackgroundIntelligentTransferService

3 files changed

+24
-21
lines changed

crates/libs/bindgen/src/gen.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -940,22 +940,20 @@ impl<'a> Gen<'a> {
940940
let name = self.param_name(param.def);
941941

942942
if let ArrayInfo::Fixed(fixed) = param.array_info {
943-
if fixed > 0 && self.reader.param_free_with(param.def).is_none() {
944-
let ty = param.ty.deref();
945-
let ty = self.type_default_name(&ty);
946-
let len = Literal::u32_unsuffixed(fixed as _);
947-
let ty = if self.reader.param_flags(param.def).output() {
948-
quote! { &mut [#ty; #len] }
949-
} else {
950-
quote! { &[#ty; #len] }
951-
};
952-
if self.reader.param_flags(param.def).optional() {
953-
tokens.combine(&quote! { #name: ::core::option::Option<#ty>, });
954-
} else {
955-
tokens.combine(&quote! { #name: #ty, });
956-
}
957-
continue;
943+
let ty = param.ty.deref();
944+
let ty = self.type_default_name(&ty);
945+
let len = Literal::u32_unsuffixed(fixed as _);
946+
let ty = if self.reader.param_flags(param.def).output() {
947+
quote! { &mut [#ty; #len] }
948+
} else {
949+
quote! { &[#ty; #len] }
950+
};
951+
if self.reader.param_flags(param.def).optional() {
952+
tokens.combine(&quote! { #name: ::core::option::Option<#ty>, });
953+
} else {
954+
tokens.combine(&quote! { #name: #ty, });
958955
}
956+
continue;
959957
}
960958

961959
if let ArrayInfo::RelativeLen(_) = param.array_info {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,11 @@ impl<'a> Reader<'a> {
553553
params[position].array_info = ArrayInfo::Removed;
554554
}
555555
}
556+
ArrayInfo::Fixed(_) => {
557+
if self.param_free_with(params[position].def).is_some() {
558+
params[position].array_info = ArrayInfo::Removed;
559+
}
560+
}
556561
_ => {}
557562
}
558563
}

crates/libs/windows/src/Windows/Win32/Networking/BackgroundIntelligentTransferService/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3004,8 +3004,8 @@ impl IBackgroundCopyJobHttpOptions {
30043004
pub unsafe fn RemoveClientCertificate(&self) -> ::windows::core::Result<()> {
30053005
(::windows::core::Interface::vtable(self).RemoveClientCertificate)(::windows::core::Interface::as_raw(self)).ok()
30063006
}
3007-
pub unsafe fn GetClientCertificate(&self, pstorelocation: &mut BG_CERT_STORE_LOCATION, pstorename: &mut ::windows::core::PWSTR, ppcerthashblob: &mut *mut u8, psubjectname: &mut ::windows::core::PWSTR) -> ::windows::core::Result<()> {
3008-
(::windows::core::Interface::vtable(self).GetClientCertificate)(::windows::core::Interface::as_raw(self), ::core::mem::transmute(pstorelocation), ::core::mem::transmute(pstorename), ::core::mem::transmute(ppcerthashblob.as_ptr()), ::core::mem::transmute(psubjectname)).ok()
3007+
pub unsafe fn GetClientCertificate(&self, pstorelocation: &mut BG_CERT_STORE_LOCATION, pstorename: &mut ::windows::core::PWSTR, ppcerthashblob: *mut *mut u8, psubjectname: &mut ::windows::core::PWSTR) -> ::windows::core::Result<()> {
3008+
(::windows::core::Interface::vtable(self).GetClientCertificate)(::windows::core::Interface::as_raw(self), ::core::mem::transmute(pstorelocation), ::core::mem::transmute(pstorename), ::core::mem::transmute(ppcerthashblob), ::core::mem::transmute(psubjectname)).ok()
30093009
}
30103010
pub unsafe fn SetCustomHeaders<'a, P0>(&self, requestheaders: P0) -> ::windows::core::Result<()>
30113011
where
@@ -3093,8 +3093,8 @@ impl IBackgroundCopyJobHttpOptions2 {
30933093
pub unsafe fn RemoveClientCertificate(&self) -> ::windows::core::Result<()> {
30943094
(::windows::core::Interface::vtable(self).base__.RemoveClientCertificate)(::windows::core::Interface::as_raw(self)).ok()
30953095
}
3096-
pub unsafe fn GetClientCertificate(&self, pstorelocation: &mut BG_CERT_STORE_LOCATION, pstorename: &mut ::windows::core::PWSTR, ppcerthashblob: &mut *mut u8, psubjectname: &mut ::windows::core::PWSTR) -> ::windows::core::Result<()> {
3097-
(::windows::core::Interface::vtable(self).base__.GetClientCertificate)(::windows::core::Interface::as_raw(self), ::core::mem::transmute(pstorelocation), ::core::mem::transmute(pstorename), ::core::mem::transmute(ppcerthashblob.as_ptr()), ::core::mem::transmute(psubjectname)).ok()
3096+
pub unsafe fn GetClientCertificate(&self, pstorelocation: &mut BG_CERT_STORE_LOCATION, pstorename: &mut ::windows::core::PWSTR, ppcerthashblob: *mut *mut u8, psubjectname: &mut ::windows::core::PWSTR) -> ::windows::core::Result<()> {
3097+
(::windows::core::Interface::vtable(self).base__.GetClientCertificate)(::windows::core::Interface::as_raw(self), ::core::mem::transmute(pstorelocation), ::core::mem::transmute(pstorename), ::core::mem::transmute(ppcerthashblob), ::core::mem::transmute(psubjectname)).ok()
30983098
}
30993099
pub unsafe fn SetCustomHeaders<'a, P0>(&self, requestheaders: P0) -> ::windows::core::Result<()>
31003100
where
@@ -3201,8 +3201,8 @@ impl IBackgroundCopyJobHttpOptions3 {
32013201
pub unsafe fn RemoveClientCertificate(&self) -> ::windows::core::Result<()> {
32023202
(::windows::core::Interface::vtable(self).base__.base__.RemoveClientCertificate)(::windows::core::Interface::as_raw(self)).ok()
32033203
}
3204-
pub unsafe fn GetClientCertificate(&self, pstorelocation: &mut BG_CERT_STORE_LOCATION, pstorename: &mut ::windows::core::PWSTR, ppcerthashblob: &mut *mut u8, psubjectname: &mut ::windows::core::PWSTR) -> ::windows::core::Result<()> {
3205-
(::windows::core::Interface::vtable(self).base__.base__.GetClientCertificate)(::windows::core::Interface::as_raw(self), ::core::mem::transmute(pstorelocation), ::core::mem::transmute(pstorename), ::core::mem::transmute(ppcerthashblob.as_ptr()), ::core::mem::transmute(psubjectname)).ok()
3204+
pub unsafe fn GetClientCertificate(&self, pstorelocation: &mut BG_CERT_STORE_LOCATION, pstorename: &mut ::windows::core::PWSTR, ppcerthashblob: *mut *mut u8, psubjectname: &mut ::windows::core::PWSTR) -> ::windows::core::Result<()> {
3205+
(::windows::core::Interface::vtable(self).base__.base__.GetClientCertificate)(::windows::core::Interface::as_raw(self), ::core::mem::transmute(pstorelocation), ::core::mem::transmute(pstorename), ::core::mem::transmute(ppcerthashblob), ::core::mem::transmute(psubjectname)).ok()
32063206
}
32073207
pub unsafe fn SetCustomHeaders<'a, P0>(&self, requestheaders: P0) -> ::windows::core::Result<()>
32083208
where

0 commit comments

Comments
 (0)