diff options
author | Xtreak <tir.karthi@gmail.com> | 2019-03-10 17:12:28 (GMT) |
---|---|---|
committer | Senthil Kumaran <skumaran@gatech.edu> | 2019-03-10 17:12:28 (GMT) |
commit | 0e1f1f01058bd4a9b98cfe443214adecc019a38c (patch) | |
tree | ee5abf47d4caaad17e3f936d75a075dc568915f3 /Lib/http | |
parent | 1aeeaeb79efa4de41f97b58547e23c2965ecabc5 (diff) | |
download | cpython-0e1f1f01058bd4a9b98cfe443214adecc019a38c.zip cpython-0e1f1f01058bd4a9b98cfe443214adecc019a38c.tar.gz cpython-0e1f1f01058bd4a9b98cfe443214adecc019a38c.tar.bz2 |
bpo-35647: Fix path check in cookiejar (#11436)
* Refactor cookie path check as per RFC 6265
* Add tests for prefix match of path
* Add news entry
* Fix set_ok_path and refactor tests
* Use slice for last letter
Diffstat (limited to 'Lib/http')
-rw-r--r-- | Lib/http/cookiejar.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Lib/http/cookiejar.py b/Lib/http/cookiejar.py index 3a96383..db82382 100644 --- a/Lib/http/cookiejar.py +++ b/Lib/http/cookiejar.py @@ -993,7 +993,7 @@ class DefaultCookiePolicy(CookiePolicy): req_path = request_path(request) if ((cookie.version > 0 or (cookie.version == 0 and self.strict_ns_set_path)) and - not req_path.startswith(cookie.path)): + not self.path_return_ok(cookie.path, request)): _debug(" path attribute %s is not a prefix of request " "path %s", cookie.path, req_path) return False @@ -1200,11 +1200,15 @@ class DefaultCookiePolicy(CookiePolicy): def path_return_ok(self, path, request): _debug("- checking cookie path=%s", path) req_path = request_path(request) - if not req_path.startswith(path): - _debug(" %s does not path-match %s", req_path, path) - return False - return True + pathlen = len(path) + if req_path == path: + return True + elif (req_path.startswith(path) and + (path.endswith("/") or req_path[pathlen:pathlen+1] == "/")): + return True + _debug(" %s does not path-match %s", req_path, path) + return False def vals_sorted_by_key(adict): keys = sorted(adict.keys()) |