diff options
author | Christian Strømme <christian.stromme@digia.com> | 2013-07-10 14:33:46 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-26 23:52:15 +0200 |
commit | 0ccb75b5fc043820d0759c0559e44be2b620df93 (patch) | |
tree | 052e3f0af9e6726d1da39d081fde37311a3ae155 | |
parent | fa8786c3971ba1614d7b6357a2dcb87fc9cdc91d (diff) |
JNI Convenience: Use isSameObject() when comparing jobjects.
Comparing the value of two jobjects are not safe, as it's not guaranteed
that two jobjects that is referencing the same object,
will have the same value. To make things worse two jobjects might have
the same value even though they reference two different objects...
Change-Id: I997ea8abfb8c687c342b261bba3848cbbd741633
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
-rw-r--r-- | src/platformsupport/jniconvenience/qjnihelpers_p.h | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/platformsupport/jniconvenience/qjnihelpers_p.h b/src/platformsupport/jniconvenience/qjnihelpers_p.h index fb44d156bd..437a0d039a 100644 --- a/src/platformsupport/jniconvenience/qjnihelpers_p.h +++ b/src/platformsupport/jniconvenience/qjnihelpers_p.h @@ -157,33 +157,39 @@ private: template <class T, class X> bool operator==(const QJNILocalRef<T> &ptr1, const QJNILocalRef<X> &ptr2) { - return ptr1.m_obj == ptr2.m_obj; + QAttachedJNIEnv env; + return env->IsSameObject(ptr1.m_obj, ptr2.m_obj); } template <class T, class X> bool operator!=(const QJNILocalRef<T> &ptr1, const QJNILocalRef<X> &ptr2) { - return ptr1.m_obj != ptr2.m_obj; + QAttachedJNIEnv env; + return !env->IsSameObject(ptr1.m_obj, ptr2.m_obj); } template <class T, class X> bool operator==(const QJNILocalRef<T> &ptr1, X ptr2) { - return ptr1.m_obj == ptr2; + QAttachedJNIEnv env; + return env->IsSameObject(ptr1.m_obj, ptr2); } template <class T, class X> bool operator==(T ptr1, const QJNILocalRef<X> &ptr2) { - return ptr1 == ptr2.m_obj; + QAttachedJNIEnv env; + return env->IsSameObject(ptr1, ptr2.m_obj); } template <class T, class X> bool operator!=(const QJNILocalRef<T> &ptr1, X ptr2) { - return !(ptr1 == ptr2); + QAttachedJNIEnv env; + return !env->IsSameObject(ptr1.m_obj, ptr2); } template <class T, class X> bool operator!=(const T *ptr1, const QJNILocalRef<X> &ptr2) { - return !(ptr2 == ptr1); + QAttachedJNIEnv env; + return !env->IsSameObject(ptr1, ptr2.m_obj); } QT_END_NAMESPACE |