From eff344ab8a509996cab491347aed4a4d8ea5b2ab Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 5 Apr 2012 11:35:09 +0200 Subject: Don't crash when comparing values containing empty arrays/objects Task-number: QTBUG-25164 Change-Id: I1fa00e359ef3583b9a7136bb888cdf5e1c3e75ac Reviewed-by: Jamey Hicks --- src/corelib/json/qjsonarray.cpp | 2 ++ src/corelib/json/qjsonvalue.cpp | 8 ++++++++ 2 files changed, 10 insertions(+) (limited to 'src/corelib/json') diff --git a/src/corelib/json/qjsonarray.cpp b/src/corelib/json/qjsonarray.cpp index d143215efd..0884f10354 100644 --- a/src/corelib/json/qjsonarray.cpp +++ b/src/corelib/json/qjsonarray.cpp @@ -87,6 +87,8 @@ QJsonArray::QJsonArray() QJsonArray::QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array) : d(data), a(array) { + Q_ASSERT(data); + Q_ASSERT(array); d->ref.ref(); } diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp index b4a689da60..7e8fdf8221 100644 --- a/src/corelib/json/qjsonvalue.cpp +++ b/src/corelib/json/qjsonvalue.cpp @@ -448,9 +448,17 @@ bool QJsonValue::operator==(const QJsonValue &other) const case String: return toString() == other.toString(); case Array: + if (base == other.base) + return true; + if (!base || !other.base) + return false; return QJsonArray(d, static_cast(base)) == QJsonArray(other.d, static_cast(other.base)); case Object: + if (base == other.base) + return true; + if (!base || !other.base) + return false; return QJsonObject(d, static_cast(base)) == QJsonObject(other.d, static_cast(other.base)); } -- cgit v1.2.3