From e21d35b9f78d9946de3c9b7d23a19e628182a9d8 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 31 Oct 2023 11:28:51 +0800 Subject: [PATCH] JNI: don't implement a signature for 'long' C++ type On Android, `long` has the width of the system, while `jlong` is always 64 bit. If we support `long` as a signature type equivalent to `jlong`, then it becomes possible to write code that fails to compile, or in the worst case crashes at runtime, on a 32bit system. Instead, support quint64, which is always the same size as jlong. Change-Id: I60432ec7411e697b5f6e1f153216ceee0af7e0f1 Reviewed-by: Assam Boudjelthia --- src/corelib/kernel/qjnitypes_impl.h | 2 +- src/plugins/platforms/android/qandroidplatformclipboard.cpp | 2 +- tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/kernel/qjnitypes_impl.h b/src/corelib/kernel/qjnitypes_impl.h index 66f9fee6fa..3af253ddc6 100644 --- a/src/corelib/kernel/qjnitypes_impl.h +++ b/src/corelib/kernel/qjnitypes_impl.h @@ -221,7 +221,7 @@ struct Traits { return CTString("I"); } else if constexpr (std::is_same_v) { return CTString("J"); - } else if constexpr (std::is_same_v) { + } else if constexpr (std::is_same_v) { return CTString("J"); } else if constexpr (std::is_same_v) { return CTString("F"); diff --git a/src/plugins/platforms/android/qandroidplatformclipboard.cpp b/src/plugins/platforms/android/qandroidplatformclipboard.cpp index bc199e32fb..a27021da01 100644 --- a/src/plugins/platforms/android/qandroidplatformclipboard.cpp +++ b/src/plugins/platforms/android/qandroidplatformclipboard.cpp @@ -28,7 +28,7 @@ void QAndroidPlatformClipboard::onClipboardDataChanged(JNIEnv *env, jobject obj, QAndroidPlatformClipboard::QAndroidPlatformClipboard() { m_clipboardManager = QtClipboardManager::construct(QtAndroidPrivate::context(), - reinterpret_cast(this)); + reinterpret_cast(this)); } QAndroidPlatformClipboard::~QAndroidPlatformClipboard() diff --git a/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp b/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp index f9d9a4c13c..58fd6790c1 100644 --- a/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp +++ b/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp @@ -137,7 +137,7 @@ enum class IntEnum : int {}; enum class UnsignedEnum : unsigned {}; enum class Int8Enum : int8_t {}; enum class ShortEnum : short {}; -enum class LongEnum : long {}; +enum class LongEnum : quint64 {}; enum class JIntEnum : jint {}; static_assert(QtJniTypes::Traits::signature() == "I"); @@ -153,7 +153,7 @@ void tst_QJniTypes::initTestCase() } -static bool nativeFunction(JNIEnv *, jclass, int, jstring, long) +static bool nativeFunction(JNIEnv *, jclass, int, jstring, quint64) { return true; }