Skip to content
Extraits de code Groupes Projets
Valider d4b52bcb rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Ferme #2602 : les traitements "catch-all" sur les champ '*' (utilisés pour...

Ferme #2602 : les traitements "catch-all" sur les champ '*' (utilisés pour passer safehtml dans une boucle DATA) ne sont appliqués que sur les balises non calculées par une fonction explicite balise_XXX.
Pour cela on ajoute un flag balise_calculee dans l'objet Champ, et on declare explicitement le traitement safehtml sur la balise #VALEUR dans DATA puisqu'elle est calculee et n'est plus protégée par la déclaration de traitement sur *
parent f3a39570
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -126,6 +126,8 @@ class Champ {
var $descr = array();
// pour localiser les erreurs
var $ligne = 0;
// un flag pour reperer les balises calculees par une fonction explicite
var $balise_calculee = false;
}
......@@ -242,6 +244,8 @@ function declarer_interfaces(){
$table_des_traitements['*'][]= false; // pas de traitement, mais permet au compilo de trouver la declaration suivante
// toujours securiser les DATA
$table_des_traitements['*']['DATA']= 'safehtml(%s)';
// expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all *
$table_des_traitements['VALEUR']['DATA']= 'safehtml(%s)';
// gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales
......
......@@ -196,7 +196,7 @@ function index_exception(&$boucle, $desc, $nom_champ, $excep)
* http://doc.spip.org/@champ_sql
*
* @param string $champ
* champ recherché
* champ recherch
* @param object $p
* contexte de compilation
* @param bool $joker
......@@ -229,6 +229,7 @@ function calculer_balise($nom, $p) {
// S'agit-t-il d'une balise_XXXX[_dist]() ?
if ($f = charger_fonction($nom, 'balise', true)) {
$p->balise_calculee = true;
$res = $f($p);
if ($res !== NULL)
return $res;
......@@ -384,8 +385,15 @@ function champs_traitements ($p) {
if (isset($table_des_traitements[$p->nom_champ]))
$ps = $table_des_traitements[$p->nom_champ];
else
$ps = $table_des_traitements['*'];
else {
// quand on utilise un traitement catch-all *
// celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
// leur propre securite
if (!$p->balise_calculee)
$ps = $table_des_traitements['*'];
else
$ps = false;
}
if (is_array($ps)) {
// Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter