diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp index 2054fb2c0ab..d9de0202ef8 100644 --- a/src/network/kernel/qhostaddress.cpp +++ b/src/network/kernel/qhostaddress.cpp @@ -153,10 +153,8 @@ void QHostAddressPrivate::setAddress(const quint8 *a_) for (int i = 0; i < 16; i++) a6[i] = a_[i]; a = 0; - if (parseMappedAddress(a, a6)) - protocol = QAbstractSocket::IPv4Protocol; - else - protocol = QAbstractSocket::IPv6Protocol; + parseMappedAddress(a, a6); + protocol = QAbstractSocket::IPv6Protocol; isParsed = true; } @@ -164,10 +162,8 @@ void QHostAddressPrivate::setAddress(const Q_IPV6ADDR &a_) { a6 = a_; a = 0; - if (parseMappedAddress(a, a6)) - protocol = QAbstractSocket::IPv4Protocol; - else - protocol = QAbstractSocket::IPv6Protocol; + parseMappedAddress(a, a6); + protocol = QAbstractSocket::IPv6Protocol; isParsed = true; } @@ -197,7 +193,6 @@ bool QHostAddressPrivate::parse() quint8 maybeIp6[16]; if (parseIp6(a, maybeIp6, &scopeId)) { setAddress(maybeIp6); - protocol = QAbstractSocket::IPv6Protocol; return true; } } @@ -205,7 +200,6 @@ bool QHostAddressPrivate::parse() quint32 maybeIp4 = 0; if (QIPAddressUtils::parseIp4(maybeIp4, a.constBegin(), a.constEnd())) { setAddress(maybeIp4); - protocol = QAbstractSocket::IPv4Protocol; return true; } diff --git a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp index 49a030aaaac..60b96d38b7d 100644 --- a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp +++ b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp @@ -313,6 +313,10 @@ void tst_QHostAddress::compare_data() QTest::newRow("5") << QHostAddress(QHostAddress::LocalHost) << QHostAddress(QHostAddress::Broadcast) << false; QTest::newRow("6") << QHostAddress(QHostAddress::LocalHost) << QHostAddress(QHostAddress::LocalHostIPv6) << false; QTest::newRow("7") << QHostAddress() << QHostAddress(QHostAddress::LocalHostIPv6) << false; + + Q_IPV6ADDR localhostv4mapped = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 127, 0, 0, 1 }; + QTest::newRow("v4-v4mapped") << QHostAddress(QHostAddress::LocalHost) << QHostAddress("::ffff:127.0.0.1") << false; + QTest::newRow("v4-v4mapped-2") << QHostAddress(QHostAddress::LocalHost) << QHostAddress(localhostv4mapped) << false; } void tst_QHostAddress::compare() @@ -322,6 +326,7 @@ void tst_QHostAddress::compare() QFETCH(bool, result); QCOMPARE(first == second, result); + QCOMPARE(second == first, result); if (result == true) QVERIFY(qHash(first) == qHash(second)); }