Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#22426 closed Bug (fixed)

Django >= 1.6.0 can't handle old style messages cookie

Reported by: iivvoo Owned by: ofirov
Component: contrib.messages Version: 1.6
Severity: Release blocker Keywords: messages, cookie, 1.4
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

The message cookie format has changed in Django 1.5.x, Django 1.6.x no longer supports the old format.

If you upgrade your project from Django 1.4.x directly to 1.6.x (skipping the 1.5 release), your application will fail quickly on old-style message cookies:

 Exception Type: IndexError
 Exception Value:
 list index out of range
 Exception Location: (...) django/contrib/messages/storage/cookie.py in process_messages, line 37

Django 1.5 contained some backward compatibility to handle both styles:

https://github.com/django/django/commit/9e7183073f64e541587e8dcfd8bb3ddeb47f8162

but this code is no longer present in Django 1.6.2

Since you can't ask all your users to delete their cookies if they run into this error, there's no easy/quick workaround.

It's not uncommon for projects to skip a version. Also, Django 1.4.x is LTS and people may jump from LTS release to LTS release, which means they will also run into this issue.

Change History (6)

comment:1 Changed 4 years ago by iivvoo

FWIW I've created a small piece of middleware as a workaround: http://vanderwijk.info/blog/workaround-django-1-4-django-1-6-message-cookie-error

but the real fix is to simply restore the backward compatibility from Django 1.5

comment:2 Changed 4 years ago by Florian Apolloner

Severity: NormalRelease blocker
Triage Stage: UnreviewedAccepted
Version: 1.6master

Since the backwards compat code is only 2 lines, I'd leave it in there at least till the next LTS. Needs backport to 1.6+

comment:3 Changed 4 years ago by ofirov

Has patch: set
Owner: changed from nobody to ofirov
Status: newassigned
Version: master1.6

I just sent a pull request for a fix for this:
https://github.com/django/django/pull/2559

I added it to 1.6 and left it out of master.

comment:4 Changed 4 years ago by Florian Apolloner <florian@…>

Resolution: fixed
Status: assignedclosed

In f286721f7fdc2202f77a5f4d650d9d0779b86811:

Fixed #22426 -- Added support old-style d.c.messages format.

Forward ported code from 1.5 that adds backwards compatibility with legacy message length.
See commit 9e7183073f64e541587e8dcfd8bb3ddeb47f8162 for details.

Thanks to Ofir Ovadia for the initial patch.

comment:5 Changed 4 years ago by Florian Apolloner <florian@…>

In 97b5833e212d3e6520dfa43525aa75f625a760a0:

[1.7.x] Fixed #22426 -- Added support old-style d.c.messages format.

Forward ported code from 1.5 that adds backwards compatibility with legacy message length.
See commit 9e7183073f64e541587e8dcfd8bb3ddeb47f8162 for details.

Thanks to Ofir Ovadia for the initial patch.

Backport of f286721f7fdc2202f77a5f4d650d9d0779b86811 from master.

comment:6 Changed 4 years ago by Florian Apolloner <florian@…>

In 6ec346ba7b251a9bcebcd467dde72463197ad210:

[1.6.x] Fixed #22426 -- Added support old-style d.c.messages format.

Forward ported code from 1.5 that adds backwards compatibility with legacy message length.
See commit 9e7183073f64e541587e8dcfd8bb3ddeb47f8162 for details.

Thanks to Ofir Ovadia for the initial patch.

Backport of f286721f7fdc2202f77a5f4d650d9d0779b86811 from master

Note: See TracTickets for help on using tickets.
Back to Top