summaryrefslogtreecommitdiffstats
path: root/Lib/urllib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2022-02-25 11:31:03 (GMT)
committerGitHub <noreply@github.com>2022-02-25 11:31:03 (GMT)
commite2e72567a1c94c548868f6ee5329363e6036057a (patch)
tree4fda0ff786291269065939cc0693ae670276dd30 /Lib/urllib
parent53ecf9e08d35801807daf74492c090a325f995b7 (diff)
downloadcpython-e2e72567a1c94c548868f6ee5329363e6036057a.zip
cpython-e2e72567a1c94c548868f6ee5329363e6036057a.tar.gz
cpython-e2e72567a1c94c548868f6ee5329363e6036057a.tar.bz2
bpo-46756: Fix authorization check in urllib.request (GH-31353)
Fix a bug in urllib.request.HTTPPasswordMgr.find_user_password() and urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated() which allowed to bypass authorization. For example, access to URI "example.org/foobar" was allowed if the user was authorized for URI "example.org/foo".
Diffstat (limited to 'Lib/urllib')
-rw-r--r--Lib/urllib/request.py8
1 files changed, 4 insertions, 4 deletions
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index fd6fc36..02f9626 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -889,10 +889,10 @@ class HTTPPasswordMgr:
return True
if base[0] != test[0]:
return False
- common = posixpath.commonprefix((base[1], test[1]))
- if len(common) == len(base[1]):
- return True
- return False
+ prefix = base[1]
+ if prefix[-1:] != '/':
+ prefix += '/'
+ return test[1].startswith(prefix)
class HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr):