[release/9.0] Initialize managed and native values in the ICustomMarshaler marshaler to null when the other is null. #109096
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Backport of #109092 to release/9.0
/cc @jkoritzinsky
Customer Impact
Reported in #109033
User experience is uninitialized (or default initialized with a "random" sentinel) memory being passed to native code when the managed value is
null
, leading to crashes in native code when usingMarshalAs(UnmanagedType.CustomMarshaler)
. Usage of this marshaler kind is relatively uncommon (not a default, explicitly opted in to), but for all usages, this case is likely to eventually show up.Regression
.NET 9 preview 2
Testing
Verified against the previous implementation.
Risk
Low. I've re-validated all of the code paths and their expected values against the previous implementation before the regression.