From 68f37a908162ac54cf90c50da6e4f4515ad7bf93 Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Sat, 3 Dec 2011 21:17:41 +0000 Subject: [PATCH] =?UTF-8?q?[1.3.X]=20Backported=20the=20fix=20for=20#15852?= =?UTF-8?q?=20--=20Modified=20cookie=20parsing=20so=20it=20can=20handle=20?= =?UTF-8?q?duplicate=20invalid=20cookie=20names.=20Thanks=20goes=20to=20Fr?= =?UTF-8?q?edrik=20St=C3=A5lnacke=20for=20the=20report=20and=20to=20vung?= =?UTF-8?q?=20for=20the=20patch.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.3.X@17168 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/http/__init__.py | 6 +++--- tests/regressiontests/httpwrappers/tests.py | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/django/http/__init__.py b/django/http/__init__.py index 68ac45d6e3..07e5a46797 100644 --- a/django/http/__init__.py +++ b/django/http/__init__.py @@ -92,7 +92,7 @@ else: if not _cookie_allows_colon_in_names: def load(self, rawdata, ignore_parse_errors=False): if ignore_parse_errors: - self.bad_cookies = [] + self.bad_cookies = set() self._BaseCookie__set = self._loose_set super(SimpleCookie, self).load(rawdata) if ignore_parse_errors: @@ -106,8 +106,8 @@ else: try: self._strict_set(key, real_value, coded_value) except Cookie.CookieError: - self.bad_cookies.append(key) - dict.__setitem__(self, key, None) + self.bad_cookies.add(key) + dict.__setitem__(self, key, Cookie.Morsel()) class CompatCookie(SimpleCookie): diff --git a/tests/regressiontests/httpwrappers/tests.py b/tests/regressiontests/httpwrappers/tests.py index 2e2932f0cf..6aabfe655e 100644 --- a/tests/regressiontests/httpwrappers/tests.py +++ b/tests/regressiontests/httpwrappers/tests.py @@ -281,3 +281,9 @@ class CookieTests(unittest.TestCase): Test that a single non-standard cookie name doesn't affect all cookies. Ticket #13007. """ self.assertTrue('good_cookie' in parse_cookie('good_cookie=yes;bad:cookie=yes').keys()) + + def test_repeated_nonstandard_keys(self): + """ + Test that a repeated non-standard name doesn't affect all cookies. Ticket #15852 + """ + self.assertTrue('good_cookie' in parse_cookie('a,=b; a,=c; good_cookie=yes').keys())