[mono] Prevent memory corruption when decoding UCO entry point #86266
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.
Description
This PR fixes an issue with memory corruption when MonoAOT compiler decodes the name of the exported symbols specified via
EntryPoint
of aUnmanagedCallersOnly
method.The offending lines were assuming that the entry point string in the metadata blob is null terminated, which caused
sprintf
to corrupt the memory aroundexport_name
.I haven't been able to reproduce the issue with a smaller example other than how it is described in the tracking issue. If I manage to find a simple repro, I will add a unit test.
PS Not sure how this was not noticed before. One possibility is that the UCOs causing the problem have different encoding in the metadata blob, as they are generated by Cecil library not Roslyn.
Fixes #86264