Fix QHostAddress::operator==(QHostAddress::SpecialAddress)
authorShane Kearns <shane.kearns@accenture.com>
Wed, 30 Nov 2011 15:42:05 +0000 (15:42 +0000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 30 Nov 2011 18:04:18 +0000 (19:04 +0100)
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 <thiago.macieira@intel.com>
src/network/kernel/qhostaddress.cpp
tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp

index cbd804c..b662a1d 100644 (file)
@@ -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);
 }
 
index 7e35830..a4b871a 100644 (file)
@@ -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) {