summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2013-10-26 20:54:03 -0700
committerMichael Merickel <michael@merickel.org>2013-10-26 20:54:03 -0700
commitd7337b1b9d6009d8e6da07162b9f4c403c3d0370 (patch)
tree964a4dbe3723e27ee3e99e82d1fca7383f2084d8
parenta4492a9bbe0a58aaed68f12657d3ddf979d22921 (diff)
parent5d1f9cbf40309548edb445512f2f950a6d207354 (diff)
downloadpyramid-d7337b1b9d6009d8e6da07162b9f4c403c3d0370.tar.gz
pyramid-d7337b1b9d6009d8e6da07162b9f4c403c3d0370.tar.bz2
pyramid-d7337b1b9d6009d8e6da07162b9f4c403c3d0370.zip
Merge pull request #1177 from bertjwregeer/fix/signed_serialize_deserialize
digestmod() has to accept a parameter in certain cases
-rw-r--r--pyramid/session.py2
-rw-r--r--pyramid/tests/test_session.py18
2 files changed, 19 insertions, 1 deletions
diff --git a/pyramid/session.py b/pyramid/session.py
index 9e0733661..d3a4113b9 100644
--- a/pyramid/session.py
+++ b/pyramid/session.py
@@ -565,7 +565,7 @@ def SignedCookieSessionFactory(
if deserialize is None:
deserialize = pickle.loads
- digestmod = lambda: hashlib.new(hashalg)
+ digestmod = lambda string=b'': hashlib.new(hashalg, string)
digest_size = digestmod().digest_size
salted_secret = bytes_(salt or '') + bytes_(secret)
diff --git a/pyramid/tests/test_session.py b/pyramid/tests/test_session.py
index c13d3ce5c..a9f70d6a0 100644
--- a/pyramid/tests/test_session.py
+++ b/pyramid/tests/test_session.py
@@ -370,6 +370,24 @@ class TestSignedCookieSession(SharedCookieSessionTests, unittest.TestCase):
session = self._makeOne(request)
self.assertEqual(session, {})
+ def test_very_long_key(self):
+ verylongkey = b'a' * 1024
+ import webob
+ request = testing.DummyRequest()
+ session = self._makeOne(request, secret=verylongkey)
+ session['a'] = 1
+ callbacks = request.response_callbacks
+ self.assertEqual(len(callbacks), 1)
+ response = webob.Response()
+
+ try:
+ result = callbacks[0](request, response)
+ except TypeError as e: # pragma: no cover
+ self.fail('HMAC failed to initialize due to key length.')
+
+ self.assertEqual(result, None)
+ self.assertTrue('Set-Cookie' in dict(response.headerlist))
+
class TestUnencryptedCookieSession(SharedCookieSessionTests, unittest.TestCase):
def setUp(self):
super(TestUnencryptedCookieSession, self).setUp()