[jnigen] Fix getID bug (#1029)
jniEnv could be null before calling attachThread, even for getting the function pointer.
diff --git a/pkgs/jni/CHANGELOG.md b/pkgs/jni/CHANGELOG.md
index 9eef5f3..650f98d 100644
--- a/pkgs/jni/CHANGELOG.md
+++ b/pkgs/jni/CHANGELOG.md
@@ -46,6 +46,11 @@
- `JObject`s now check the types using `instanceof` in debug mode when using
`castTo`.
+## 0.7.3
+
+- Fixed a bug where `get(Static)MethodID` and `get(Static)FieldID` could access
+ null and throw.
+
## 0.7.2
- Fixed a bug where reading non-null terminated strings would overflow.
diff --git a/pkgs/jni/src/dartjni.c b/pkgs/jni/src/dartjni.c
index baef731..382c9bc 100644
--- a/pkgs/jni/src/dartjni.c
+++ b/pkgs/jni/src/dartjni.c
@@ -211,25 +211,28 @@
char* name,
char* sig) {
JniPointerResult result = {NULL, NULL};
- attach_thread();
result.value = getter(jniEnv, cls, name, sig);
result.exception = check_exception();
return result;
}
JniPointerResult getMethodID(jclass cls, char* name, char* sig) {
+ attach_thread();
return _getId((MemberGetter)(*jniEnv)->GetMethodID, cls, name, sig);
}
JniPointerResult getStaticMethodID(jclass cls, char* name, char* sig) {
+ attach_thread();
return _getId((MemberGetter)(*jniEnv)->GetStaticMethodID, cls, name, sig);
}
JniPointerResult getFieldID(jclass cls, char* name, char* sig) {
+ attach_thread();
return _getId((MemberGetter)(*jniEnv)->GetFieldID, cls, name, sig);
}
JniPointerResult getStaticFieldID(jclass cls, char* name, char* sig) {
+ attach_thread();
return _getId((MemberGetter)(*jniEnv)->GetStaticFieldID, cls, name, sig);
}