All pastes #169478 Raw Edit

Diff

public text v1 · immutable
·published 2006-09-13 22:39 UTC
rendered paste body
Index: trac/web/api.py===================================================================--- trac/web/api.py	(revision 3731)+++ trac/web/api.py	(working copy)@@ -15,7 +15,7 @@ # Author: Christopher Lenz <cmlenz@gmx.de>  from BaseHTTPServer import BaseHTTPRequestHandler-from Cookie import SimpleCookie as Cookie+from Cookie import CookieError, BaseCookie, SimpleCookie import cgi import mimetypes import os@@ -93,6 +93,27 @@     """  +class Cookie(SimpleCookie):+    def load(self, rawdata, ignore_parse_errors=False):+        if ignore_parse_errors:+            self.bad_cookies = []+            self._BaseCookie__set = self._loose_set+        SimpleCookie.load(self, rawdata)+        if ignore_parse_errors:+            self._BaseCookie__set = self._strict_set+            for key in self.bad_cookies:+                del self[key]++    _strict_set = BaseCookie._BaseCookie__set++    def _loose_set(self, key, real_value, coded_value):+        try:+            self._strict_set(key, real_value, coded_value)+        except CookieError:+            self.bad_cookies.append(key)+            dict.__setitem__(self, key, None)++ class Request(object):     """Represents a HTTP request/response pair.     @@ -130,7 +151,7 @@         self.incookie = Cookie()         cookie = self.get_header('Cookie')         if cookie:-            self.incookie.load(cookie)+            self.incookie.load(cookie, ignore_parse_errors=True)         self.outcookie = Cookie()          self.base_url = self.environ.get('trac.base_url')Index: trac/web/tests/api.py===================================================================--- trac/web/tests/api.py	(revision 3731)+++ trac/web/tests/api.py	(working copy)@@ -96,7 +96,12 @@         req.write(u'Föö')         self.assertEqual('Föö', buf.getvalue()) +    def test_invalid_cookies(self):+        environ = self._make_environ(HTTP_COOKIE='bad:key=value;')+        req = Request(environ, None)+        self.assertEqual('', str(req.incookie)) + def suite():     suite = unittest.TestSuite()     suite.addTest(unittest.makeSuite(RequestTestCase, 'test'))