Bug #28935
crash sur caractère non ascii dans /idp/oidc/authorize/
100%
Description
Internal Server Error: /idp/oidc/authorize/ Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 132, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python2.7/dist-packages/authentic2/decorators.py", line 29, in f return func(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/authentic2_idp_oidc/views.py", line 130, in authorize fragment=fragment) File "/usr/lib/python2.7/dist-packages/authentic2_idp_oidc/views.py", line 73, in authorization_error return redirect(request, redirect_uri, params=params, resolve=False) File "/usr/lib/python2.7/dist-packages/authentic2/utils.py", line 319, in redirect include=include, exclude=exclude, fragment=fragment, resolve=resolve) File "/usr/lib/python2.7/dist-packages/authentic2/utils.py", line 307, in make_url return url.encode('ascii') UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 61: ordinal not in range(128) 'QUERY_STRING': 'scope=openid%20profile%20email&response_type=code&client_id=91bf2ef9-d068-43f0-a92c-2bcbfdb538e7&redirect_uri=https://noel.strasbourg.eu/web/no elgustez-la-soupe-des-chefs-%C3%A9toiles-alsaciens&state=https://noel.strasbourg.eu/de/web/noel/degustez-la-soupe-des-chefs-%C3%A9toiles-alsacie ns',
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Lié à Bug #20181: Erreur 500 sur la redirection (pour demander à se logguer) d'une url contenant des accents ajouté
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Je pense que ce que j'ai fait dans le #20181 n'était donc pas complet, je change de fusil d'épaule, désormais make_url() retournera de l'unicode mais en entrée url sera convertit en str/bytes avant utilisation de urlsplit/QueryDict pour que les manipulations soient faites sans considéré d'encodage.
Mais ça veut dire qu'on suppose que tout URL unicode passé à make_url() vient forcément d'un décodage utf-8 d'une URL complète urldécodé (traitement qui arrive quand on accède à une URL passé en paramètre, problème initial sur #20181, django fait un parse_qs(query_string)['next'].decode('utf-8')
).
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
In django you should trust.
En fait Django a déjà la solution dans des fonctions obscurément documentées: iri_to_uri()
[1] et uri_to_iri()
[2]
1 https://docs.djangoproject.com/fr/2.1/ref/utils/#django.utils.encoding.iri_to_uri
2 https://docs.djangoproject.com/fr/2.1/ref/utils/#django.utils.encoding.uri_to_iri
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Fichier 0001-utils-use-iri_to_uri-uri_to_iri-to-manipulate-URLs-i.patch 0001-utils-use-iri_to_uri-uri_to_iri-to-manipulate-URLs-i.patch ajouté
- Patch proposed changé de Non à Oui
Mis à jour par Serghei Mihai il y a plus de 5 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
- % réalisé changé de 0 à 100
Appliqué par commit authentic2|5095f90afc7f3c9876011642ad9adca5cbddd36e.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
utils: use iri_to_uri/uri_to_iri to manipulate URLs in make_url (fixes #28935)
This patch add non-ASCII characters to URLs in OIDC and CAS tests to
check make_url() works correctly.