mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #23138: Fixed parsing cookies with absent keys or values in cookiejar.
Patch by Demian Brecht.
This commit is contained in:
parent
79fbeee237
commit
577fc4e87f
3 changed files with 57 additions and 15 deletions
|
@ -472,26 +472,42 @@ def parse_ns_headers(ns_headers):
|
|||
for ns_header in ns_headers:
|
||||
pairs = []
|
||||
version_set = False
|
||||
for ii, param in enumerate(re.split(r";\s*", ns_header)):
|
||||
param = param.rstrip()
|
||||
if param == "": continue
|
||||
if "=" not in param:
|
||||
k, v = param, None
|
||||
else:
|
||||
k, v = re.split(r"\s*=\s*", param, 1)
|
||||
k = k.lstrip()
|
||||
|
||||
# XXX: The following does not strictly adhere to RFCs in that empty
|
||||
# names and values are legal (the former will only appear once and will
|
||||
# be overwritten if multiple occurrences are present). This is
|
||||
# mostly to deal with backwards compatibility.
|
||||
for ii, param in enumerate(ns_header.split(';')):
|
||||
param = param.strip()
|
||||
|
||||
key, sep, val = param.partition('=')
|
||||
key = key.strip()
|
||||
|
||||
if not key:
|
||||
if ii == 0:
|
||||
break
|
||||
else:
|
||||
continue
|
||||
|
||||
# allow for a distinction between present and empty and missing
|
||||
# altogether
|
||||
val = val.strip() if sep else None
|
||||
|
||||
if ii != 0:
|
||||
lc = k.lower()
|
||||
lc = key.lower()
|
||||
if lc in known_attrs:
|
||||
k = lc
|
||||
if k == "version":
|
||||
key = lc
|
||||
|
||||
if key == "version":
|
||||
# This is an RFC 2109 cookie.
|
||||
v = strip_quotes(v)
|
||||
if val is not None:
|
||||
val = strip_quotes(val)
|
||||
version_set = True
|
||||
if k == "expires":
|
||||
elif key == "expires":
|
||||
# convert expires date to seconds since epoch
|
||||
v = http2time(strip_quotes(v)) # None if invalid
|
||||
pairs.append((k, v))
|
||||
if val is not None:
|
||||
val = http2time(strip_quotes(val)) # None if invalid
|
||||
pairs.append((key, val))
|
||||
|
||||
if pairs:
|
||||
if not version_set:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue