summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2021-11-01 19:54:22 +0200
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2021-11-15 19:00:21 +0000
commitdfb4b7856a82a72934211d9a1a44626777570d30 (patch)
treecccc1c93509e09aebf0853e823c0bf92ad8c81dd /tests
parentf3e26891061f26a42d009ec6395f82975019039d (diff)
Android: check if objectClass() is not null in registerNativeMethods()
In case the class doens't have a default constructor, checking for object.isValid() will give false because the object won't be created, however, the class could still be loaded and we could have a valid jclass. Pick-to: 6.2 Fixes: QTBUG-96069 Change-Id: I8d59e26d9d7c0e8e363ce443937091a374a24473 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java10
-rw-r--r--tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp50
2 files changed, 48 insertions, 12 deletions
diff --git a/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java b/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java
index 7bf6a7455a..411bd1501d 100644
--- a/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java
+++ b/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java
@@ -49,3 +49,13 @@ public class QtJniEnvironmentTestClass
}
}
+class QtJniEnvironmentTestClassNoCtor
+{
+ private static native void callbackFromJavaNoCtor(String message);
+
+ public static void appendJavaToString(String message)
+ {
+ callbackFromJavaNoCtor("From Java (no ctor): " + message);
+ }
+}
+
diff --git a/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp b/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp
index 079de48948..8cf207fc3a 100644
--- a/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp
+++ b/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp
@@ -34,6 +34,8 @@
static const char javaTestClass[] =
"org/qtproject/qt/android/testdatapackage/QtJniEnvironmentTestClass";
+static const char javaTestClassNoCtor[] =
+ "org/qtproject/qt/android/testdatapackage/QtJniEnvironmentTestClassNoCtor";
static QString registerNativesString = QStringLiteral("Qt");
static int registerNativeInteger = 0;
@@ -122,22 +124,46 @@ static void callbackFromJava(JNIEnv *env, jobject /*thiz*/, jstring value)
registerNativesString = QJniObject(value).toString();
}
-void tst_QJniEnvironment::registerNativeMethods()
+static void callbackFromJavaNoCtor(JNIEnv *env, jobject /*thiz*/, jstring value)
{
- const JNINativeMethod methods[] {
- {"callbackFromJava", "(Ljava/lang/String;)V", reinterpret_cast<void *>(callbackFromJava)}
- };
+ Q_UNUSED(env)
+ registerNativesString = QJniObject(value).toString();
+}
+void tst_QJniEnvironment::registerNativeMethods()
+{
+ QJniObject QtString = QJniObject::fromString(registerNativesString);
QJniEnvironment env;
- QVERIFY(env.registerNativeMethods(javaTestClass, methods, 1));
- QJniObject QtString = QJniObject::fromString(registerNativesString);
- QJniObject::callStaticMethod<void>(javaTestClass,
- "appendJavaToString",
- "(Ljava/lang/String;)V",
- QtString.object<jstring>());
- QTest::qWait(200);
- QVERIFY(registerNativesString == QStringLiteral("From Java: Qt"));
+ {
+ const JNINativeMethod methods[] {
+ {"callbackFromJava", "(Ljava/lang/String;)V", reinterpret_cast<void *>(callbackFromJava)}
+ };
+
+ QVERIFY(env.registerNativeMethods(javaTestClass, methods, 1));
+
+ QJniObject::callStaticMethod<void>(javaTestClass,
+ "appendJavaToString",
+ "(Ljava/lang/String;)V",
+ QtString.object<jstring>());
+ QTest::qWait(200);
+ QVERIFY(registerNativesString == QStringLiteral("From Java: Qt"));
+ }
+
+ // No default constructor in class
+ {
+ const JNINativeMethod methods[] {{"callbackFromJavaNoCtor", "(Ljava/lang/String;)V",
+ reinterpret_cast<void *>(callbackFromJavaNoCtor)}};
+
+ QVERIFY(env.registerNativeMethods(javaTestClassNoCtor, methods, 1));
+
+ QJniObject::callStaticMethod<void>(javaTestClassNoCtor,
+ "appendJavaToString",
+ "(Ljava/lang/String;)V",
+ QtString.object<jstring>());
+ QTest::qWait(200);
+ QVERIFY(registerNativesString == QStringLiteral("From Java (no ctor): Qt"));
+ }
}
static void intCallbackFromJava(JNIEnv *env, jobject /*thiz*/, jint value)