From b1684da6ec27d28359ec170e4d332ec53718d046 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 5 Jan 2023 09:50:28 -0300 Subject: [PATCH] QUrlQuery: fix operator== for emptied object case If an object had elements and then was emptied, it will have a non-null d pointer, which wasn't taken into account in the comparison. Fixes: QTBUG-109840 Change-Id: I69ecc04064514f939896fffd17376aa18184653c Reviewed-by: Volker Hilsheimer (cherry picked from commit 3d584b1093cdb6245b02eda996db2927ffaf09ea) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/io/qurlquery.cpp | 6 +++++- tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qurlquery.cpp b/src/corelib/io/qurlquery.cpp index 9b3015ecf00..57e66142ca1 100644 --- a/src/corelib/io/qurlquery.cpp +++ b/src/corelib/io/qurlquery.cpp @@ -401,7 +401,11 @@ bool QUrlQuery::operator ==(const QUrlQuery &other) const return d->valueDelimiter == other.d->valueDelimiter && d->pairDelimiter == other.d->pairDelimiter && d->itemList == other.d->itemList; - return false; + + const QUrlQueryPrivate *x = d ? d.data() : other.d.data(); + return x->valueDelimiter == defaultQueryValueDelimiter() && + x->pairDelimiter == defaultQueryPairDelimiter() && + x->itemList.isEmpty(); } /*! diff --git a/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp b/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp index 17749380961..41482f42562 100644 --- a/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp +++ b/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp @@ -210,12 +210,14 @@ void tst_QUrlQuery::constructing() void tst_QUrlQuery::addRemove() { QUrlQuery query; + QCOMPARE(query, query); { // one item query.addQueryItem("a", "b"); QVERIFY(!query.isEmpty()); QVERIFY(query.hasQueryItem("a")); + QCOMPARE_NE(query, QUrlQuery()); QCOMPARE(query.queryItemValue("a"), QString("b")); QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b"); @@ -226,6 +228,7 @@ void tst_QUrlQuery::addRemove() } QUrlQuery original = query; + QCOMPARE(query, original); { // two items @@ -298,6 +301,9 @@ void tst_QUrlQuery::addRemove() query.removeQueryItem("a"); query.removeQueryItem("e"); QVERIFY(query.isEmpty()); + QVERIFY(query.isDetached()); + QCOMPARE_NE(query, original); + QCOMPARE(query, QUrlQuery()); } }