From 49140efe2d0a31fd529b8e6af09e0df31e3a719c Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 30 Nov 2011 15:42:05 +0000 Subject: [PATCH] Fix QHostAddress::operator==(QHostAddress::SpecialAddress) QHostAddress(QHostAddress::Any) was not equal to QHostAddress::Any because only one of the operator== overloads was handling this. Task-number: QTBUG-22898 Change-Id: Ifd36947a50e8c36362b4e850fd8d5105ee0925ff Reviewed-by: Thiago Macieira --- src/network/kernel/qhostaddress.cpp | 2 ++ tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp index cbd804c44ba..b662a1d610d 100644 --- a/src/network/kernel/qhostaddress.cpp +++ b/src/network/kernel/qhostaddress.cpp @@ -899,6 +899,8 @@ bool QHostAddress::operator ==(SpecialAddress other) const return otherAddress.d->protocol == QAbstractSocket::IPv6Protocol && memcmp(&d->a6, &otherAddress.d->a6, sizeof(Q_IPV6ADDR)) == 0; } + if (d->protocol == QAbstractSocket::AnyIPProtocol) + return other == QHostAddress::Any; return int(other) == int(Null); } diff --git a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp index 7e35830791d..a4b871a1276 100644 --- a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp +++ b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp @@ -285,6 +285,10 @@ void tst_QHostAddress::specialAddresses() QFETCH(bool, result); QVERIFY((QHostAddress(text) == (QHostAddress::SpecialAddress)address) == result); + //check special address equal to itself (QTBUG-22898), note two overloads of operator== + QVERIFY(QHostAddress((QHostAddress::SpecialAddress)address) == QHostAddress((QHostAddress::SpecialAddress)address)); + QVERIFY(QHostAddress((QHostAddress::SpecialAddress)address) == (QHostAddress::SpecialAddress)address); + QHostAddress setter; setter.setAddress(text); if (result) {