Don't crash when comparing values containing empty arrays/objects
Task-number: QTBUG-25164 Change-Id: I1fa00e359ef3583b9a7136bb888cdf5e1c3e75ac Reviewed-by: Jamey Hicks <jamey.hicks@nokia.com>bb10
parent
1ec7843856
commit
eff344ab8a
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<QJsonPrivate::Array *>(base))
|
||||
== QJsonArray(other.d, static_cast<QJsonPrivate::Array *>(other.base));
|
||||
case Object:
|
||||
if (base == other.base)
|
||||
return true;
|
||||
if (!base || !other.base)
|
||||
return false;
|
||||
return QJsonObject(d, static_cast<QJsonPrivate::Object *>(base))
|
||||
== QJsonObject(other.d, static_cast<QJsonPrivate::Object *>(other.base));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -123,6 +123,8 @@ private Q_SLOTS:
|
|||
|
||||
void testTrailingComma();
|
||||
void testDetachBug();
|
||||
|
||||
void valueEquals();
|
||||
private:
|
||||
QString testDataDir;
|
||||
};
|
||||
|
|
@ -1845,5 +1847,51 @@ void TestQtJson::testDetachBug()
|
|||
QCOMPARE(local.keys().size(), 1);
|
||||
}
|
||||
|
||||
void TestQtJson::valueEquals()
|
||||
{
|
||||
QVERIFY(QJsonValue() == QJsonValue());
|
||||
QVERIFY(QJsonValue() != QJsonValue(QJsonValue::Undefined));
|
||||
QVERIFY(QJsonValue() != QJsonValue(true));
|
||||
QVERIFY(QJsonValue() != QJsonValue(1.));
|
||||
QVERIFY(QJsonValue() != QJsonValue(QJsonArray()));
|
||||
QVERIFY(QJsonValue() != QJsonValue(QJsonObject()));
|
||||
|
||||
QVERIFY(QJsonValue(true) == QJsonValue(true));
|
||||
QVERIFY(QJsonValue(true) != QJsonValue(false));
|
||||
QVERIFY(QJsonValue(true) != QJsonValue(QJsonValue::Undefined));
|
||||
QVERIFY(QJsonValue(true) != QJsonValue());
|
||||
QVERIFY(QJsonValue(true) != QJsonValue(1.));
|
||||
QVERIFY(QJsonValue(true) != QJsonValue(QJsonArray()));
|
||||
QVERIFY(QJsonValue(true) != QJsonValue(QJsonObject()));
|
||||
|
||||
QVERIFY(QJsonValue(1.) == QJsonValue(1.));
|
||||
QVERIFY(QJsonValue(1.) != QJsonValue(2.));
|
||||
QVERIFY(QJsonValue(1.) != QJsonValue(QJsonValue::Undefined));
|
||||
QVERIFY(QJsonValue(1.) != QJsonValue());
|
||||
QVERIFY(QJsonValue(1.) != QJsonValue(true));
|
||||
QVERIFY(QJsonValue(1.) != QJsonValue(QJsonArray()));
|
||||
QVERIFY(QJsonValue(1.) != QJsonValue(QJsonObject()));
|
||||
|
||||
QVERIFY(QJsonValue(QJsonArray()) == QJsonValue(QJsonArray()));
|
||||
QJsonArray nonEmptyArray;
|
||||
nonEmptyArray.append(true);
|
||||
QVERIFY(QJsonValue(QJsonArray()) != nonEmptyArray);
|
||||
QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(QJsonValue::Undefined));
|
||||
QVERIFY(QJsonValue(QJsonArray()) != QJsonValue());
|
||||
QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(true));
|
||||
QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(1.));
|
||||
QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(QJsonObject()));
|
||||
|
||||
QVERIFY(QJsonValue(QJsonObject()) == QJsonValue(QJsonObject()));
|
||||
QJsonObject nonEmptyObject;
|
||||
nonEmptyObject.insert("Key", true);
|
||||
QVERIFY(QJsonValue(QJsonObject()) != nonEmptyObject);
|
||||
QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(QJsonValue::Undefined));
|
||||
QVERIFY(QJsonValue(QJsonObject()) != QJsonValue());
|
||||
QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(true));
|
||||
QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(1.));
|
||||
QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(QJsonArray()));
|
||||
}
|
||||
|
||||
QTEST_MAIN(TestQtJson)
|
||||
#include "tst_qtjson.moc"
|
||||
|
|
|
|||
Loading…
Reference in New Issue