diff options
-rw-r--r-- | src/network/access/qnetworkcookie.cpp | 20 | ||||
-rw-r--r-- | tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp | 5 |
2 files changed, 18 insertions, 7 deletions
diff --git a/src/network/access/qnetworkcookie.cpp b/src/network/access/qnetworkcookie.cpp index a871c04d56..55049280aa 100644 --- a/src/network/access/qnetworkcookie.cpp +++ b/src/network/access/qnetworkcookie.cpp @@ -51,6 +51,7 @@ #include "QtCore/qstring.h" #include "QtCore/qstringlist.h" #include "QtCore/qurl.h" +#include "QtNetwork/qhostaddress.h" #include "private/qobject_p.h" QT_BEGIN_NAMESPACE @@ -1015,14 +1016,19 @@ void QNetworkCookie::normalize(const QUrl &url) d->path = defaultPath; } - if (d->domain.isEmpty()) + if (d->domain.isEmpty()) { d->domain = url.host(); - else if (!d->domain.startsWith(QLatin1Char('.'))) - // Ensure the domain starts with a dot if its field was not empty - // in the HTTP header. There are some servers that forget the - // leading dot and this is actually forbidden according to RFC 2109, - // but all browsers accept it anyway so we do that as well. - d->domain.prepend(QLatin1Char('.')); + } else { + QHostAddress hostAddress(d->domain); + if (hostAddress.protocol() != QAbstractSocket::IPv4Protocol + && !d->domain.startsWith(QLatin1Char('.'))) { + // Ensure the domain starts with a dot if its field was not empty + // in the HTTP header. There are some servers that forget the + // leading dot and this is actually forbidden according to RFC 2109, + // but all browsers accept it anyway so we do that as well. + d->domain.prepend(QLatin1Char('.')); + } + } } #ifndef QT_NO_DEBUG_STREAM diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp index 4ee4b67ec0..25d91d63f5 100644 --- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp +++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp @@ -211,6 +211,11 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data() result += cookie; QTest::newRow("effective-tld2-accepted") << preset << cookie << "http://www.gobiernoelectronico.ar" << result << true; + result.clear(); + preset.clear(); + cookie.setDomain("127.0.0.1"); + result += cookie; + QTest::newRow("IPv4-address-as-domain") << preset << cookie << "http://127.0.0.1/" << result << true; // setting the defaults: finalCookie = cookie; |