#32643: CookieStorage for contrib.messages crashes after upgrade to django 3.2
-------------------------------------+-------------------------------------
Reporter: Jan Pieter | Owner: nobody
Waagmeester |
Type: Bug | Status: new
Component: contrib.messages | Version: 3.2
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Jan Pieter Waagmeester:
Old description:
> After upgrading to django 3.2, a prevously stored cookie for
> contrib.messages crashes in
>
> https://github.com/django/django/blob/d6314c4c2ef647efe0d12450214fc5b4a4055290/django/contrib/messages/storage/cookie.py#L175
>
> Django Version: 3.2
> Python Version: 3.8.2
>
> {{{
> Traceback (most recent call last):
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/core/handlers/exception.py", line 47, in inner
> response = get_response(request)
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/utils/deprecation.py", line 119, in __call__
> response = self.process_response(request, response)
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/contrib/messages/middleware.py", line 23, in
> process_response
> unstored_messages = request._messages.update(response)
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/contrib/messages/storage/base.py", line 127, in update
> messages = self._loaded_messages + self._queued_messages
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/contrib/messages/storage/base.py", line 79, in
> _loaded_messages
> messages, all_retrieved = self._get()
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/contrib/messages/storage/fallback.py", line 25, in _get
> messages, all_retrieved = storage._get()
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/contrib/messages/storage/cookie.py", line 86, in _get
> messages = self._decode(data)
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/contrib/messages/storage/cookie.py", line 175, in _decode
> return self.signer.unsign_object(data, serializer=MessageSerializer)
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/core/signing.py", line 195, in unsign_object
> data = b64_decode(base64d)
> File "/home/obs/virtualenv/lib/python3.8/site-
> packages/django/core/signing.py", line 68, in b64_decode
> return base64.urlsafe_b64decode(s + pad)
> File "/usr/lib/python3.8/base64.py", line 133, in urlsafe_b64decode
> return b64decode(s)
> File "/usr/lib/python3.8/base64.py", line 87, in b64decode
> return binascii.a2b_base64(s)
>
> Exception Type: Error at /user/login/
> Exception Value: Invalid base64-encoded string: number of data characters
> (369) cannot be 1 more than a multiple of 4
> }}}
>
> (redacted) contents of the 'messages' cookie:
> {{{
> '[["__json_message",0,25,"Successfully signed in as '
> '[email protected]."],["__json_message",0,25,"Successfully '
> 'signed in as jieter."],["__json_message",0,25,"Ingelogd als '
> '[email protected]."],["__json_message",0,25,"Ingelogd '
> 'als '
> '[email protected]."],["__json_message",0,20,"Bevestigingsmail '
> 'verzonden naar [email protected]."],["__json_message",0,25,"Ingelogd '
> 'als '
> '[email protected]."]]:1lTkj1:j_3PlpYSKiqPTMAB6_p2Q00eE8j6k7n0Sg_-
> _IpXG7Y')
> }}}
New description:
After upgrading to django 3.2, a previously stored cookie for
contrib.messages crashes in
https://github.com/django/django/blob/d6314c4c2ef647efe0d12450214fc5b4a4055290/django/contrib/messages/storage/cookie.py#L175
Django Version: 3.2
Python Version: 3.8.2
{{{
Traceback (most recent call last):
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/utils/deprecation.py", line 119, in __call__
response = self.process_response(request, response)
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/contrib/messages/middleware.py", line 23, in
process_response
unstored_messages = request._messages.update(response)
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/contrib/messages/storage/base.py", line 127, in update
messages = self._loaded_messages + self._queued_messages
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/contrib/messages/storage/base.py", line 79, in
_loaded_messages
messages, all_retrieved = self._get()
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/contrib/messages/storage/fallback.py", line 25, in _get
messages, all_retrieved = storage._get()
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/contrib/messages/storage/cookie.py", line 86, in _get
messages = self._decode(data)
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/contrib/messages/storage/cookie.py", line 175, in _decode
return self.signer.unsign_object(data, serializer=MessageSerializer)
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/core/signing.py", line 195, in unsign_object
data = b64_decode(base64d)
File "/home/obs/virtualenv/lib/python3.8/site-
packages/django/core/signing.py", line 68, in b64_decode
return base64.urlsafe_b64decode(s + pad)
File "/usr/lib/python3.8/base64.py", line 133, in urlsafe_b64decode
return b64decode(s)
File "/usr/lib/python3.8/base64.py", line 87, in b64decode
return binascii.a2b_base64(s)
Exception Type: Error at /user/login/
Exception Value: Invalid base64-encoded string: number of data characters
(369) cannot be 1 more than a multiple of 4
}}}
(redacted) contents of the 'messages' cookie:
{{{
'[["__json_message",0,25,"Successfully signed in as '
'[email protected]."],["__json_message",0,25,"Successfully '
'signed in as jieter."],["__json_message",0,25,"Ingelogd als '
'[email protected]."],["__json_message",0,25,"Ingelogd '
'als '
'[email protected]."],["__json_message",0,20,"Bevestigingsmail '
'verzonden naar [email protected]."],["__json_message",0,25,"Ingelogd '
'als '
'[email protected]."]]:1lTkj1:j_3PlpYSKiqPTMAB6_p2Q00eE8j6k7n0Sg_-_IpXG7Y')
}}}
--
--
Ticket URL: <https://code.djangoproject.com/ticket/32643#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/064.9756e8552fcc9cc13b26d0f05dffecf4%40djangoproject.com.