summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@digia.com>2013-07-10 14:33:46 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-26 23:52:15 +0200
commit0ccb75b5fc043820d0759c0559e44be2b620df93 (patch)
tree052e3f0af9e6726d1da39d081fde37311a3ae155
parentfa8786c3971ba1614d7b6357a2dcb87fc9cdc91d (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.h18
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