Skip empty cookie records. Add tests.

This commit is contained in:
L. Kärkkäinen 2023-10-14 20:03:43 +01:00
parent 6d433af406
commit a202435283
2 changed files with 17 additions and 1 deletions

View File

@ -80,8 +80,10 @@ def parse_cookie(raw: str) -> Dict[str, List[str]]:
# Support cookies =value or plain value with no name # Support cookies =value or plain value with no name
# https://github.com/httpwg/http-extensions/issues/159 # https://github.com/httpwg/http-extensions/issues/159
if not sep: if not sep:
if not name:
continue # Empty value like ;; or a cookie header with no value
name, value = "", name name, value = "", name
if COOKIE_NAME_RESERVED_CHARS.search(name): # no cov if COOKIE_NAME_RESERVED_CHARS.search(name): # no cov
continue continue

View File

@ -11,6 +11,20 @@ from sanic.cookies.request import CookieRequestParameters
from sanic.exceptions import ServerError from sanic.exceptions import ServerError
from sanic.response import text from sanic.response import text
from sanic.response.convenience import json from sanic.response.convenience import json
from sanic.cookies.request import parse_cookie
def test_request_cookies():
cdict = parse_cookie("foo=one; foo=two; abc = xyz;;bare;=bare2")
assert cdict == {
"foo": ["one", "two"],
"abc": ["xyz"],
"": ["bare", "bare2"],
}
c = CookieRequestParameters(cdict)
assert c.getlist("foo") == ["one", "two"]
assert c.getlist("abc") == ["xyz"]
assert c.getlist("") == ["bare", "bare2"]
assert c.getlist("bare") == None # [] might be sensible but we got None for now
# ------------------------------------------------------------ # # ------------------------------------------------------------ #