[OSM-talk-fr] Bogue d'Osmose (codage XML invalide provenant du serveur Backend)

Philippe Verdy verdy_p at wanadoo.fr
Ven 10 Fév 11:58:26 UTC 2012


Note, la doc Python du module SAX est là:

http://docs.python.org/library/xml.sax.utils.html

Elle précise bien que quoteattr() doit normalement encoder les mêmes
caractères que:

xml.sax.saxutils.escape(data[, entities])

sans même avoir à passer un tableau entities (les caractères "&", "<"
et ">" sont inclus par défaut), mais quoteattr() ajoute les guillemets
(") et apostrophes ('), sans retirer pour autant le caractère "&" des
entités de substitution définies par défaut.

Visiblement c'est un problème de version du module "xml.sax.saxutils"
que tu utilises (il faut une version 2.2 ou supérieure de Python pour
avoir cette fonction). Note bien que quoteattr() a été conçu pour HTML
ou SGML, pas pour la conformité XML ou XHTML (la conformité XML vient
avec la version 2.3 il me semble, sinon il te faut passer un paramètre
entities ; Python est actuellement en version 2.7)


Le 10 février 2012 12:45, Philippe Verdy <verdy_p at wanadoo.fr> a écrit :
> A mon avis le bogue est surtout à corriger dans la fonction
> quoteattr() du module Python "sax.saxutils".
>
> Car ***même*** en HTML ou SGML (au lieu de XML ou XHTML) il faudrait
> systématiquement recoder un "&" présent dans une valeur qu'on veut
> encapsuler dans un attribut d'élément HTML (ou XML). Tout parseur HTML
> ou SGML reconnait "&" automatiquement (sans avoir besoin de
> définir l'entité), mais ***tolère*** (par compatibilité ascendante
> avec les très vieux navigateurs HTML, d'avant même HTML4) des valeurs
> contenant des entités mal codées (dans ce cas un parseur HTML a un
> "fallback" lui permettant de réinterpréter la valeur donnée sans faire
> le décodage des entités, mais PAS un parseur XML qui s'y refuse, car
> c'est un trou de sécurité).
>
> Le code d'Osmose visiblement l'oublie quand il génère aussi d'autres
> URLs "en dur" à d'autres endroits de la page HTML du frontend (mais ce
> frontend est codé pour générer du HTML, pas du XHTML, ce qui autorise
> le "fallback" pourtant pas recommandé du tout et dangereux).
>
>>> Mon dépôt osmose sur gitorious n'est pas vraiment une référence.
>>> Regardes plutôt la branche dev de http://gitorious.org/osmose pour la
>>> version de développement.




Plus d'informations sur la liste de diffusion Talk-fr