Opened 4 years ago

Last modified 4 years ago

#32345 closed Bug

i18n.set_language unquotes next_url and produces wrong url for url params containing "&" character — at Version 1

Reported by: Sebastian Kapunkt Owned by: nobody
Component: Internationalization Version: 3.1
Severity: Normal Keywords: i18n unquote
Cc: Johannes Maron Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: yes UI/UX: no

Description (last modified by Johannes Maron)

When changing the language and the current URL parameter include a parameter value with an encoded "&" like

?paramter=some%20%26%20thing

the redirect response from set_langauge is

?paramter=some%20&%20thing

where I would still expect the same URL from as in the beginning.

I've written a Django test that shows this bug:

def test_set_language_url_params():
    from django.test import RequestFactory
    from django.views.i18n import set_language

    rf = RequestFactory()
    request = rf.post("", next="")
    request.META['HTTP_REFERER'] = '/someurl/?paramter=some%20%26%20thing'

    response = set_language(request)
    assert response.url == '/someurl/?paramter=some%20%26%20thing'

Change History (1)

comment:1 by Johannes Maron, 4 years ago

Cc: Johannes Maron added
Description: modified (diff)
Easy pickings: set
Triage Stage: UnreviewedAccepted

After some serious digging, the bug was introduced here: https://github.com/django/django/commit/9e3f141701b96b6974b3386f83dc76e70a41377d via #26466.
The problem seems to be, that the URL is not properly parsed. The path and GET attributes needs to be handled differently for that to work.

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