Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Context: dotnet/android#7285 (comment) (#1029)
`Java.Inteorp.JniEnvironment.Types.RegisterNatives()` is overloaded: namespace Java.Interop { partial class JniEnvironment { partial class Types { public static void RegisterNatives (JniObjectReference type, JniNativeMethodRegistration[] methods); public static void RegisterNatives (JniObjectReference type, JniNativeMethodRegistration[] methods, int numMethods); } } } If the `int numMethods` overload is used, then: 1. it should be possible to pass an array which contains *more* than `numMethods` elements, and 2. Passing such an array shouldn't throw an exception. For example: var methods = new JniNativeMethodRegistration [10]; JniEnvironment.Types.RegisterNatives (type, methods, 0); Instead, when using a Debug configuration build of `Java.Interop.dll`, a `NullReferenceException` would be thrown, because the `foreach` loop would traverse *every element*, not just the first `numMethods` elements, which could result in accessing `methods[i].Marshaler.GetType()`, which could be `null`. Fix the `DEBUG && NETCOREAPP` check so that only the first `numMethods` elements are accessed, *not* all of them, and add a `null` check around `JniNativeMethodRegistration.Marshaler` access. This prevents the `NullReferenceException`. Additionally, add some parameter validation and throw an `ArgumentOutOfRangeException` if `numMethods` is negative or is greater than `methods.Length`.
- Loading branch information