From 97f9d6dddcadc9a01b098ec3552e204ce1c7a2ab Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Tue, 7 May 2024 18:13:51 +0200
Subject: [PATCH] fix: pas d'indirection PHP par defaut dans les modeles en
 previsu, et l'eventuel PHP restant venant de modeles persos necessite une
 autorisation pour eval

Refs: spip-team/security#4853
---
 action/porte_plume_previsu.php | 4 ++++
 porte_plume_fonctions.php      | 3 ++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/action/porte_plume_previsu.php b/action/porte_plume_previsu.php
index 6027938..9c3b8c4 100644
--- a/action/porte_plume_previsu.php
+++ b/action/porte_plume_previsu.php
@@ -35,5 +35,9 @@ function action_porte_plume_previsu_dist() {
 		$contexte = [];
 	}
 
+	// pas d'indirection PHP dans les modeles formulaire
+	$GLOBALS['_FORCER_EXECUTER_DIRECTEMENT_BALISE_DYNAMIQUE'] = true;
 	echo recuperer_fond('prive/porte_plume_preview', $contexte);
+	// retablir le fonctionnement par défaut pour les éventuels crons qui vont tourner après
+	unset($GLOBALS['_FORCER_EXECUTER_DIRECTEMENT_BALISE_DYNAMIQUE']);
 }
diff --git a/porte_plume_fonctions.php b/porte_plume_fonctions.php
index d8b700a..e2c638c 100644
--- a/porte_plume_fonctions.php
+++ b/porte_plume_fonctions.php
@@ -863,7 +863,8 @@ function traitements_previsu($texte, $nom_champ = '', $type_objet = '', $connect
 	}
 
 	// si il y a du PHP issu de modeles, il faut l'eval ici, car on aura pas de eval final contrairement aux pages SPIP
-	if (defined('_PROTEGE_PHP_MODELES')) {
+	if (defined('_PROTEGE_PHP_MODELES')
+	  && autoriser('previsualiser','modelesphp')) {
 		$texte = echappe_retour($texte, 'php' . _PROTEGE_PHP_MODELES, 'traitements_previsu_php_modeles_eval');
 	}
 
-- 
GitLab