QJsonObject::take: add missing detach() call
We were modifying shared objects. Fixes: QTBUG-89625 Change-Id: Id6bc735b79cf4beb9454fffd165c56476a5dec04 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de> (cherry picked from commit 00b759a8d06dbec42232b1b8748c0725da7ced00) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
191e1bbf37
commit
9b43d8a98a
@ -617,6 +617,7 @@ QJsonValue QJsonObject::takeImpl(T key)
|
|||||||
if (!keyExists)
|
if (!keyExists)
|
||||||
return QJsonValue(QJsonValue::Undefined);
|
return QJsonValue(QJsonValue::Undefined);
|
||||||
|
|
||||||
|
detach();
|
||||||
const QJsonValue v = QJsonPrivate::Value::fromTrustedCbor(o->extractAt(index + 1));
|
const QJsonValue v = QJsonPrivate::Value::fromTrustedCbor(o->extractAt(index + 1));
|
||||||
removeAt(index / 2);
|
removeAt(index / 2);
|
||||||
return v;
|
return v;
|
||||||
|
@ -58,6 +58,7 @@ private Q_SLOTS:
|
|||||||
void testNumberComparisons();
|
void testNumberComparisons();
|
||||||
|
|
||||||
void testObjectSimple();
|
void testObjectSimple();
|
||||||
|
void testObjectTakeDetach();
|
||||||
void testObjectSmallKeys();
|
void testObjectSmallKeys();
|
||||||
void testObjectInsertCopies();
|
void testObjectInsertCopies();
|
||||||
void testArraySimple();
|
void testArraySimple();
|
||||||
@ -575,6 +576,24 @@ void tst_QtJson::testObjectSimple()
|
|||||||
QCOMPARE(subvalue.toObject(), subobject);
|
QCOMPARE(subvalue.toObject(), subobject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QtJson::testObjectTakeDetach()
|
||||||
|
{
|
||||||
|
QJsonObject object1, object2;
|
||||||
|
object1["key1"] = 1;
|
||||||
|
object1["key2"] = 2;
|
||||||
|
object2 = object1;
|
||||||
|
|
||||||
|
object1.take("key2");
|
||||||
|
object1.remove("key1");
|
||||||
|
QVERIFY(!object1.contains("key1"));
|
||||||
|
QVERIFY(object2.contains("key1"));
|
||||||
|
QVERIFY(object2.value("key1").isDouble());
|
||||||
|
|
||||||
|
QVERIFY(!object1.contains("key2"));
|
||||||
|
QVERIFY(object2.contains("key2"));
|
||||||
|
QVERIFY(object2.value("key2").isDouble());
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QtJson::testObjectSmallKeys()
|
void tst_QtJson::testObjectSmallKeys()
|
||||||
{
|
{
|
||||||
QJsonObject data1;
|
QJsonObject data1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user