fix: Platform calling-convention getters return null instead of throwing#22
Merged
Merged
Conversation
DefaultCallingConvention, Cdecl/Stdcall/FastcallCallingConvention, and SystemCallConvention wrapped their handle with CallingConvention.MustTakeHandle, which throws ArgumentNullException when the core returns a null handle. Python's default_calling_convention (and the four siblings) return None for an unset convention. Switch each getter to CallingConvention.TakeHandle (same owner=true ownership, but returns null on IntPtr.Zero) and widen the return type to CallingConvention?, mirroring Architecture.GetCdeclCallingConvention which already does this via NewFromHandle.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
DefaultCallingConvention,Cdecl/Stdcall/FastcallCallingConvention, andSystemCallConventionwrapped their handle withCallingConvention.MustTakeHandle, which throwsArgumentNullExceptionwhen the core returns a null handle. Python'sdefault_calling_convention(and the four siblings) returnNonefor an unset convention.Switch each getter to
CallingConvention.TakeHandle(sameowner=trueownership —BNGetPlatform*returns an owned ref — but returnsnullonIntPtr.Zero) and widen the return type toCallingConvention?. MirrorsArchitecture.GetCdeclCallingConventionwhich already does the null-safe thing viaNewFromHandle.Verification
linux-x86_64is"sysv"; reaching.Nameproves the handle is passed throughTakeHandlewith ownership intact. All five getters are reachable without throwing.