Projet

Général

Profil

Development #32681

greco: retirer les caractères de contrôle avant de passer une chaîne unicode JSON dans du XML

Ajouté par Benjamin Dauvergne il y a environ 5 ans. Mis à jour il y a environ 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
29 avril 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Car les caractères de contrôle sont interdits dans tout document XML :

https://stackoverflow.com/a/28152666

Fichiers

Révisions associées

Révision b312381a (diff)
Ajouté par Benjamin Dauvergne il y a environ 5 ans

greco: escape XML illegal characters (#32681)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

#4

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.

#5

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)
#6

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
#8

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

  • Assigné à Benjamin Dauvergne supprimé
#10

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 ?

#11

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)

#12

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.

Formats disponibles : Atom PDF