diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-02-08 14:16:55 +0200 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-02-11 14:03:50 +0000 |
commit | deca7cd730a44988d3e15c551d9a82a5c75618e2 (patch) | |
tree | 84ba8f43c51bbcdfd231ba0bb31f26f66660f81c /src/corelib/kernel/qjnienvironment.cpp | |
parent | 3348107c038cbac724e33d6bb30671ddddc1505a (diff) |
Fix registerNativeMethods for good
The initial implementation and the commit
c00ab6f8eaa3cdc9a29dd103c91b2eaf212cac9f was wrong:
* env->findClass() in fact returns a global reference, and in any
case we shouldn't be calling that, instead QJniObject would be
enough.
* The size param provided to env->RegisterNatives was wrong.
* A test for registerNativeMethods() is added to ensure such break
is not repeated again.
Task-number: QTBUG-89633
Pick-to: 6.1
Change-Id: I4d3a6a9270755f465c40add25521fb750dd4de0a
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Diffstat (limited to 'src/corelib/kernel/qjnienvironment.cpp')
-rw-r--r-- | src/corelib/kernel/qjnienvironment.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/corelib/kernel/qjnienvironment.cpp b/src/corelib/kernel/qjnienvironment.cpp index eea62116d6..ee57504327 100644 --- a/src/corelib/kernel/qjnienvironment.cpp +++ b/src/corelib/kernel/qjnienvironment.cpp @@ -222,12 +222,13 @@ JavaVM *QJniEnvironment::javaVM() */ bool QJniEnvironment::registerNativeMethods(const char *className, JNINativeMethod methods[], int size) { - jclass clazz = findClass(className); + QJniObject classObject(className); - if (!clazz) + if (!classObject.isValid()) return false; - if (d->jniEnv->RegisterNatives(clazz, methods, size / sizeof(methods[0])) < 0) { + jclass clazz = d->jniEnv->GetObjectClass(classObject.object()); + if (d->jniEnv->RegisterNatives(clazz, methods, size) < 0) { exceptionCheckAndClear(); d->jniEnv->DeleteLocalRef(clazz); return false; |