[spip-dev] Code PHP affiché avec #FORMULAIRE_ECRIRE_AUTEUR

Si on met le code suivant, tout seul dans sa page :

[(#XX|?{x,#FORMULAIRE_ECRIRE_AUTEUR{1}})

ça affiche le code PHP du formulaire (incluant l'adresse mail du
destinataire).

À noter : au lieu de #XX, certaines balises (filtrées ou non) provoquent
le bug, d'autres non. Par exemple,
- avec #VAL{42}|=={42} pas de bug
- avec #EVAL{42}|=={42} ça bug

Idem, les tests sur #ENV ou #SESSION chient, mais #ID_AUTEUR (si on met
une boucle autour) ne provoque pas de bug.

Je crois avoir compris que c'est précisément si #XX récupère un _request() : il applique alors interdire_scripts() sur l'ensemble du résultat de [(#XX|filtres)] et non simplement sur #XX (en appliquant ensuite ce résultat sur les filtres)

C'est simplement en regardant rapidement le débug du code ci dessous que j'imagine ça (?page=poum&id_auteur=1&test=1 :

<BOUCLE_auteur(AUTEURS){id_auteur}>
<h1>1</h1>
[(#ENV{test}|?{#FORMULAIRE_ECRIRE_AUTEUR})]
<h1>2</h1>
[(#ENV*{test}|?{#FORMULAIRE_ECRIRE_AUTEUR})]
<h1>3</h1>
[(#ENV**{test}|?{#FORMULAIRE_ECRIRE_AUTEUR})]
<h1>4</h1>
[(#TEST|?{#FORMULAIRE_ECRIRE_AUTEUR})]
<h1>5</h1>
[(#TEST*|?{#FORMULAIRE_ECRIRE_AUTEUR})]
<h1>6</h1>
[(#TEST**|?{#FORMULAIRE_ECRIRE_AUTEUR})]
</BOUCLE_auteur>

El Wednesday 09 September 2009 12:33:32 Matthieu Marcillaud va escriure:

Je crois avoir compris que c'est précisément si #XX récupère un
_request() : il applique alors interdire_scripts() sur l'ensemble du
résultat de [(#XX|filtres)] et non simplement sur #XX (en appliquant
ensuite ce résultat sur les filtres)

C'est simplement en regardant rapidement le débug du code ci dessous
que j'imagine ça (?page=poum&id_auteur=1&test=1 :

En effet, entre ces 2 bouts de squelette (#XX* et #XX**):

<BOUCLE_x(AUTEURS){id_auteur=1}>
[(#XX*|?{x,#FORMULAIRE_ECRIRE_AUTEUR})]
</BOUCLE_x>

et :

<BOUCLE_x(AUTEURS){id_auteur=1}>
[(#XX**|?{x,#FORMULAIRE_ECRIRE_AUTEUR})]
</BOUCLE_x>

Le premier bugge, le second non, et le mode debug montre en effet que la
seule différence de code PHP réside dans l'appel à interdire_scripts().

Par contre, de ce que j'en comprends, interdire_scripts() n'est pas
appliqué sur le résultat de #XX mais sur celui de
#FORMULAIRE_ECRIRE_AUTEUR :

interdire_scripts(executer_balise_dynamique('F_E_A', ...));