From 255be8fb01698c6e29929ff7d2c3bb588eb97905 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Wed, 17 Nov 2021 11:33:17 +0100
Subject: [PATCH] =?UTF-8?q?Fix=20un=20probl=C3=A8me=20recurent=20de=20fuit?=
 =?UTF-8?q?e=20de=20donn=C3=A9es=20lorsque=20les=20utilisateur=20mettent?=
 =?UTF-8?q?=20un=20#FORMULAIRE=5FTRUC=20dans=20un=20modeles/xxxx.html=20:?=
 =?UTF-8?q?=20le=20formulaire=20perd=20son=20dynamisme=20quand=20il=20est?=
 =?UTF-8?q?=20inclus=20dans=20l'appelant,=20que=20ce=20soit=20via=20un=20<?=
 =?UTF-8?q?xxxx|>=20ou=20via=20un=20#MODELE{xxx}.=20On=20repere=20le=20cas?=
 =?UTF-8?q?=20est=20on=20injecte=20du=20PHP=20qui=20appelle=20la=20fonctio?=
 =?UTF-8?q?n=20executer=5Fbalise=5Fdynamique()=20au=20lieu=20d'injecter=20?=
 =?UTF-8?q?l'appel=20a=20la=20fonction=20lui=20meme?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/balise/formulaire_.php | 15 ++++++++++++++-
 ecrire/inc_version.php        |  2 +-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/ecrire/balise/formulaire_.php b/ecrire/balise/formulaire_.php
index f708e834b4..e05681d430 100644
--- a/ecrire/balise/formulaire_.php
+++ b/ecrire/balise/formulaire_.php
@@ -135,7 +135,20 @@ function balise_FORMULAIRE__dist($p) {
 	}
 
 	// sinon renvoyer un code php dynamique
-	return calculer_balise_dynamique($p, $p->nom_champ, []);
+	$p = calculer_balise_dynamique($p, $p->nom_champ, []);
+
+	if (!test_espace_prive()
+	  and !empty($p->descr['sourcefile'])
+	  and $f = $p->descr['sourcefile']
+	  and basename(dirname($f)) === 'modeles') {
+		// un modele est toujours inséré en texte dans son contenant
+		// donc si on est dans le public avec un cache on va perdre le dynamisme
+		// et on risque de mettre en cache les valeurs pre-remplies du formulaire
+		// on injecte donc le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
+		$p->code = "'<'.'?php echo (".texte_script($p->code)."); ?'.'>'";
+		// dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave)
+	}
+	return $p;
 }
 
 /**
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index fb9c2f22e6..955e587721 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -449,7 +449,7 @@ define('_SPIP_EXTRA_VERSION', '-dev');
 define('_DEV_VERSION_SPIP_COMPAT', '4.0.99');
 // version des signatures de fonctions PHP
 // (= date de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes)
-$spip_version_code = 20211021;
+$spip_version_code = 20211117;
 // version de la base SQL (= Date + numero incremental a 2 chiffres YYYYMMDDXX)
 $spip_version_base = 2021021800;
 
-- 
GitLab