Browse Source

Added better error reporting for unicode errors in sessions

pull/624/head
Armin Ronacher 12 years ago
parent
commit
2b885ce4dc
  1. 6
      flask/debughelpers.py
  2. 11
      flask/sessions.py

6
flask/debughelpers.py

@ -10,6 +10,12 @@
""" """
class UnexpectedUnicodeError(AssertionError, UnicodeError):
"""Raised in places where we want some better error reporting for
unexpected unicode or binary data.
"""
class DebugFilesKeyError(KeyError, AssertionError): class DebugFilesKeyError(KeyError, AssertionError):
"""Raised from request.files during debugging. The idea is that it can """Raised from request.files during debugging. The idea is that it can
provide a better error message than just a generic KeyError/BadRequest. provide a better error message than just a generic KeyError/BadRequest.

11
flask/sessions.py

@ -66,6 +66,14 @@ class TaggedJSONSerializer(object):
return {' d': http_date(value)} return {' d': http_date(value)}
elif isinstance(value, dict): elif isinstance(value, dict):
return dict((k, _tag(v)) for k, v in value.iteritems()) return dict((k, _tag(v)) for k, v in value.iteritems())
elif isinstance(value, str):
try:
return unicode(value)
except UnicodeError:
raise UnexpectedUnicodeError(u'A byte string with '
u'non-ASCII data was passed to the session system '
u'which can only store unicode strings. Consider '
u'base64 encoding your string (String was %r)' % value)
return value return value
return json.dumps(_tag(value), separators=(',', ':')) return json.dumps(_tag(value), separators=(',', ':'))
@ -292,3 +300,6 @@ class SecureCookieSessionInterface(SessionInterface):
response.set_cookie(app.session_cookie_name, val, response.set_cookie(app.session_cookie_name, val,
expires=expires, httponly=httponly, expires=expires, httponly=httponly,
domain=domain, path=path, secure=secure) domain=domain, path=path, secure=secure)
from flask.debughelpers import UnexpectedUnicodeError

Loading…
Cancel
Save