Skip to content

Commit

Permalink
enforce integer for max-age cookie
Browse files Browse the repository at this point in the history
  • Loading branch information
r0fls committed Jan 3, 2019
1 parent f4f90ca commit b4b37f3
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
4 changes: 4 additions & 0 deletions sanic/cookies.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import re
import string

DEFAULT_MAX_AGE = 0

# ------------------------------------------------------------ #
# SimpleCookie
Expand Down Expand Up @@ -103,6 +104,9 @@ def __setitem__(self, key, value):
if key not in self._keys:
raise KeyError("Unknown cookie property")
if value is not False:
if key.lower() == "max-age":
if not str(value).isdigit():
value = DEFAULT_MAX_AGE
return super().__setitem__(key, value)

def encode(self, encoding):
Expand Down
10 changes: 7 additions & 3 deletions tests/test_cookies.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from http.cookies import SimpleCookie
from sanic.response import text
import pytest
from sanic.cookies import Cookie
from sanic.cookies import Cookie, DEFAULT_MAX_AGE

# ------------------------------------------------------------ #
# GET
Expand Down Expand Up @@ -138,7 +138,7 @@ def handler(request):
assert response.cookies["test"].value == "pass"


@pytest.mark.parametrize("max_age", ["0", 30, "30"])
@pytest.mark.parametrize("max_age", ["0", 30, "30", "test"])
def test_cookie_max_age(app, max_age):
cookies = {"test": "wait"}

Expand All @@ -153,7 +153,11 @@ def handler(request):
assert response.status == 200

assert response.cookies["test"].value == "pass"
assert response.cookies["test"]["max-age"] == str(max_age)

if str(max_age).isdigit():
assert response.cookies["test"]["max-age"] == str(max_age)
else:
assert response.cookies["test"]["max-age"] == str(DEFAULT_MAX_AGE)


@pytest.mark.parametrize(
Expand Down

0 comments on commit b4b37f3

Please sign in to comment.