diff options
| author | Claude Paroz <claude@2xlibre.net> | 2012-08-12 22:26:17 +0200 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2012-08-12 22:49:10 +0200 |
| commit | 8a1f439d3aca3a021a43ba6c4235c3ac68908657 (patch) | |
| tree | 39d6951e21f29fb0e6b14c8e60f6a67c4b8b9d58 | |
| parent | ac37c9e495eb1003cc6d126ed5d686a29fb08596 (diff) | |
[py3] Fix encoding issues in contrib.sessions
| -rw-r--r-- | django/contrib/sessions/backends/base.py | 11 | ||||
| -rw-r--r-- | django/contrib/sessions/backends/db.py | 3 |
2 files changed, 8 insertions, 6 deletions
diff --git a/django/contrib/sessions/backends/base.py b/django/contrib/sessions/backends/base.py index 153cde9830..4515edbb17 100644 --- a/django/contrib/sessions/backends/base.py +++ b/django/contrib/sessions/backends/base.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import base64 import time from datetime import datetime, timedelta @@ -12,6 +14,7 @@ from django.utils.crypto import constant_time_compare from django.utils.crypto import get_random_string from django.utils.crypto import salted_hmac from django.utils import timezone +from django.utils.encoding import smart_bytes class CreateError(Exception): """ @@ -78,15 +81,15 @@ class SessionBase(object): "Returns the given session dictionary pickled and encoded as a string." pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL) hash = self._hash(pickled) - return base64.encodestring(hash + ":" + pickled) + return base64.encodestring(hash.encode() + b":" + pickled) def decode(self, session_data): - encoded_data = base64.decodestring(session_data) + encoded_data = base64.decodestring(smart_bytes(session_data)) try: # could produce ValueError if there is no ':' - hash, pickled = encoded_data.split(':', 1) + hash, pickled = encoded_data.split(b':', 1) expected_hash = self._hash(pickled) - if not constant_time_compare(hash, expected_hash): + if not constant_time_compare(hash.decode(), expected_hash): raise SuspiciousOperation("Session data corrupted") else: return pickle.loads(pickled) diff --git a/django/contrib/sessions/backends/db.py b/django/contrib/sessions/backends/db.py index 0cc17b44c3..babdb72c27 100644 --- a/django/contrib/sessions/backends/db.py +++ b/django/contrib/sessions/backends/db.py @@ -1,7 +1,6 @@ from django.contrib.sessions.backends.base import SessionBase, CreateError from django.core.exceptions import SuspiciousOperation from django.db import IntegrityError, transaction, router -from django.utils.encoding import force_text from django.utils import timezone @@ -18,7 +17,7 @@ class SessionStore(SessionBase): session_key = self.session_key, expire_date__gt=timezone.now() ) - return self.decode(force_text(s.session_data)) + return self.decode(s.session_data) except (Session.DoesNotExist, SuspiciousOperation): self.create() return {} |
