diff options
Diffstat (limited to 'src/network/access/qnetworkcookie.cpp')
-rw-r--r-- | src/network/access/qnetworkcookie.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/network/access/qnetworkcookie.cpp b/src/network/access/qnetworkcookie.cpp index 306195addb..5a75dd55e8 100644 --- a/src/network/access/qnetworkcookie.cpp +++ b/src/network/access/qnetworkcookie.cpp @@ -466,7 +466,7 @@ QByteArray QNetworkCookie::toRawForm(RawForm form) const } if (!d->path.isEmpty()) { result += "; path="; - result += QUrl::toPercentEncoding(d->path, "/"); + result += d->path.toUtf8(); } } return result; @@ -954,8 +954,15 @@ QList<QNetworkCookie> QNetworkCookiePrivate::parseSetCookieHeaderLine(const QByt } //if unparsed, ignore the attribute but not the whole cookie (RFC6265 section 5.2.2) } else if (field.first == "path") { - QString path = QUrl::fromPercentEncoding(field.second); - cookie.setPath(path); + if (field.second.startsWith('/')) { + // ### we should treat cookie paths as an octet sequence internally + // However RFC6265 says we should assume UTF-8 for presentation as a string + cookie.setPath(QString::fromUtf8(field.second)); + } else { + // if the path doesn't start with '/' then set the default path (RFC6265 section 5.2.4) + // and also IETF test case path0030 which has valid and empty path in the same cookie + cookie.setPath(QString()); + } } else if (field.first == "secure") { cookie.setSecure(true); } else if (field.first == "httponly") { |