Development #32681
greco: retirer les caractères de contrôle avant de passer une chaîne unicode JSON dans du XML
0%
Description
Car les caractères de contrôle sont interdits dans tout document XML :
https://stackoverflow.com/a/28152666
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Fichier 0001-greco-escape-XML-illegal-characters-32681.patch 0001-greco-escape-XML-illegal-characters-32681.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Fichier 0001-greco-escape-XML-illegal-characters-32681.patch 0001-greco-escape-XML-illegal-characters-32681.patch ajouté
Sans import six inutile.
Mis à jour par Nicolas Roche il y a environ 5 ans
- Statut changé de Solution proposée à Solution validée
# duck-type unicode/str if hasattr(field_value, 'isnumeric'): ...
cf : set(dir(unicode)) - set(dir(str))
La présence de cette méthode permet de s'assurer que l'on a une variable unicode
et non pas un str
Ack.
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit b312381a75b4dc6afdcd13ff0ab7b83a303a1080 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Mon Apr 29 17:09:26 2019 +0200 greco: escape XML illegal characters (#32681)
Mis à jour par Frédéric Péters il y a presque 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Frédéric Péters il y a presque 5 ans
Il y a eu travail côté wcs pour squeezer ces caractères dès l'entrée, c'est encore vraiment utile de faire un truc ici ?
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
1. le code est déjà dans passerelle, ce serait bien qu'il fonctionne ou qu'on l'enlève
2. il y a un formulaire en cours coté SAU qui n'avance pas : https://demarches-support.grandlyon.com/backoffice/management/contactez-nous-glc/39/ mais je vais aller modifier la donnée en base (mais bon depuis le temps la personne a du abandonner)
Mis à jour par Nicolas Roche il y a environ 3 ans
C'est la faute au relecteur, avec ce patch :
diff --git a/passerelle/contrib/greco/models.py b/passerelle/contrib/greco/models.py index 8985b94f..4a443bdf 100644 --- a/passerelle/contrib/greco/models.py +++ b/passerelle/contrib/greco/models.py @@ -65,9 +65,9 @@ def fill_sudsobject_with_dict(sudsobject, fields, prefix=None): field_value = fields[attr] # duck-type unicode/str if hasattr(field_value, 'isnumeric'): field_value = escape_xml_illegal_chars(field_value) - setattr(sudsobject, key, fields[attr]) + setattr(sudsobject, key, field_value)
Le payload fourni fonctionne :
(Pdb) val "[Domaine : GrandLyon Connect][Service : GrandLyon Connect] Bonjour,\nJe n'arrive pas à payer en ligne ma vignette de stationnement de 40\x1d€\nComment puis-je y parvenir?\nMerci de votre réponse" (Pdb) _illegal_xml_chars_RE.sub(replacement, val) "[Domaine : GrandLyon Connect][Service : GrandLyon Connect] Bonjour,\nJe n'arrive pas à payer en ligne ma vignette de stationnement de 40?€\nComment puis-je y parvenir?\nMerci de votre réponse"
Dites-moi si pour me faire pardonner je fais un ticket pour faire marcher + test ou pour retirer.
greco: escape XML illegal characters (#32681)