From 1674c9486fa10c823f9f0f818814ee80ec9fd114 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Wed, 11 Jan 2006 15:22:33 +0000
Subject: [PATCH] =?UTF-8?q?revision=20de=20toutes=20les=20<TEXTAREA>=20pou?=
 =?UTF-8?q?r=20qu'ils=20utilisent=20bien=20entites=5Fhtml()=20modification?=
 =?UTF-8?q?=20de=20entites=5Fhtml()=20pour=20qu'il=20ne=20touche=20pas=20a?=
 =?UTF-8?q?ux=20caract=C3=A8res=20<=20100=20histoire=20de=20pouvoir=20cons?=
 =?UTF-8?q?erver=20l'=C3=A9dition=20de=20&#91;=20par=20exemple=20(caract?=
 =?UTF-8?q?=C3=A8re=20de=20raccourci)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc_articles.php               |  2 +-
 ecrire/inc_filtres.php3               |  6 +++++-
 ecrire/inc_forum_envoi.php            | 12 ++++++------
 ecrire/inc_mots_type.php              |  4 ++--
 ecrire/inc_rubriques_edit.php         |  4 ++--
 ecrire/inc_sites_edit.php             |  2 +-
 ecrire/inc_texte.php3                 |  7 +++----
 formulaires/inc-formulaire_forum.php3 |  5 +++--
 8 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/ecrire/inc_articles.php b/ecrire/inc_articles.php
index 4c1ef9801f..6da9af2f03 100644
--- a/ecrire/inc_articles.php
+++ b/ecrire/inc_articles.php
@@ -427,7 +427,7 @@ function boites_de_config_articles($id_article, $id_rubrique, $flag_editable,
 
 		echo "<P>"._T('texte_descriptif_petition')."&nbsp;:<BR>";
 		echo "<TEXTAREA NAME='texte_petition' CLASS='forml' ROWS='4' COLS='10' wrap=soft>";
-		echo $texte_petition;
+		echo entites_html($texte_petition);
 		echo "</TEXTAREA><P>\n";
 
 		echo "<P align='$spip_lang_right'>";
diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index ef29d0814a..d622ce4b99 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -16,8 +16,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Echappement des entites HTML avec correction des entites "brutes"
 // (generees par les butineurs lorsqu'on rentre des caracteres n'appartenant
 // pas au charset de la page [iso-8859-1 par defaut])
+//
+// Attention on limite cette correction aux caracteres "hauts" (en fait > 99
+// pour aller plus vite que le > 127 qui serait logique), de maniere a
+// preserver des echappements de caracteres "bas" (par exemple [ ou ")
 function corriger_entites_html($texte) {
-	return preg_replace(',&amp;(#[0-9]+;),i', '&\1', $texte);
+	return preg_replace(',&amp;(#[0-9][0-9][0-9]+;),i', '&\1', $texte);
 }
 // idem mais corriger aussi les &amp;eacute; en &eacute;
 function corriger_toutes_entites_html($texte) {
diff --git a/ecrire/inc_forum_envoi.php b/ecrire/inc_forum_envoi.php
index 1046501b4c..8d384bb125 100644
--- a/ecrire/inc_forum_envoi.php
+++ b/ecrire/inc_forum_envoi.php
@@ -62,13 +62,13 @@ if ($valider_forum AND ($statut!='')) {
 	(titre, texte, date_heure, nom_site, url_site, statut, id_auteur,
 	auteur, email_auteur, id_rubrique, id_parent, id_article, id_breve,
 	id_message, id_syndic)
-	VALUES ('".texte_script($titre_message)."',
-	'".texte_script($texte)."', NOW(),
-	'".texte_script($nom_site)."',
-	'".texte_script($url_site)."',
-	'".texte_script($statut)."',
+	VALUES ('".addslashes($titre_message)."',
+	'".addslashes($texte)."', NOW(),
+	'".addslashes($nom_site)."',
+	'".addslashes($url_site)."',
+	'".addslashes($statut)."',
 	$connect_id_auteur,
-	'".texte_script($nom)."',
+	'".addslashes($nom)."',
 	'$connect_email',
 	'$id_rubrique', '$id_parent', '$id_article', '$id_breve',
 	'$id_message', '$id_syndic')";
diff --git a/ecrire/inc_mots_type.php b/ecrire/inc_mots_type.php
index 72a404c160..7203d07fce 100644
--- a/ecrire/inc_mots_type.php
+++ b/ecrire/inc_mots_type.php
@@ -96,7 +96,7 @@ if ($connect_statut =="0minirezo"){
 	if ($options == 'avancees' OR $descriptif) {
 		echo "<B>"._T('texte_descriptif_rapide')."</B><BR>";
 		echo "<TEXTAREA NAME='descriptif' CLASS='forml' ROWS='4' COLS='40' wrap=soft>";
-		echo $descriptif;
+		echo entites_html($descriptif);
 		echo "</TEXTAREA><P>\n";
 	}
 	else
@@ -105,7 +105,7 @@ if ($connect_statut =="0minirezo"){
 	if ($options == 'avancees' OR $texte) {
 		echo "<B>"._T('info_texte_explicatif')."</B><BR>";
 		echo "<TEXTAREA NAME='texte' ROWS='8' CLASS='forml' COLS='40' wrap=soft>";
-		echo $texte;
+		echo entites_html($texte);
 		echo "</TEXTAREA><P>\n";
 	}
 	else
diff --git a/ecrire/inc_rubriques_edit.php b/ecrire/inc_rubriques_edit.php
index 5ab2466e76..69a77b707b 100644
--- a/ecrire/inc_rubriques_edit.php
+++ b/ecrire/inc_rubriques_edit.php
@@ -147,7 +147,7 @@ if ($options == "avancees" OR $descriptif) {
 	echo "<B>"._T('texte_descriptif_rapide')."</B><BR>";
 	echo _T('entree_contenu_rubrique')."<BR>";
 	echo "<TEXTAREA NAME='descriptif' CLASS='forml' ROWS='4' COLS='40' wrap=soft>";
-	echo $descriptif;
+	echo entites_html($descriptif);
 	echo "</TEXTAREA><P>\n";
 }
 else {
@@ -157,7 +157,7 @@ else {
 echo "<B>"._T('info_texte_explicatif')."</B>";
 echo aide ("raccourcis");
 echo "<BR><TEXTAREA NAME='texte' ROWS='15' CLASS='formo' COLS='40' wrap=soft>";
-echo $texte;
+echo entites_html($texte);
 echo "</TEXTAREA>\n";
 
 	if ($champs_extra) {
diff --git a/ecrire/inc_sites_edit.php b/ecrire/inc_sites_edit.php
index fda06a001a..bac8e275f8 100644
--- a/ecrire/inc_sites_edit.php
+++ b/ecrire/inc_sites_edit.php
@@ -132,7 +132,7 @@ echo "<input type='text' class='formo' name='url_site' value=\"$url_site\" size=
 
 echo "<p /><b>"._T('entree_description_site')."</b><br>";
 echo "<textarea name='descriptif' rows='8' class='forml' cols='40' wrap=soft>";
-echo $descriptif;
+echo entites_html($descriptif);
 echo "</textarea>\n";
 
 $activer_syndic = $GLOBALS['meta']["activer_syndic"];
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index 343bcb41fb..c8e5db35ab 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -59,7 +59,7 @@ if (!tester_variable('puce', "<img class='spip_puce' src='puce.gif' alt='-' />&n
 // XHTML - Preserver les balises-bloc
 define('_BALISES_BLOCS',
 	'div|pre|ul|li|blockquote|h[1-5r]|'
-	.'t(able|[rdh]|body|foot)|'
+	.'t(able|[rdh]|body|foot|extarea)|'
 	.'form|object|center|marquee|address|'
 	.'d[ltd]|script|noscript|map|del|ins|button|fieldset');
 
@@ -84,8 +84,8 @@ function code_echappement($rempl, $source='') {
 	// Convertir en base64
 	$base64 = base64_encode($rempl);
 
-	// Ajouter le span/div d'echappement
-	$mode = preg_match(',<('._BALISES_BLOCS.')[>[:space:]]>,', $rempl) ?
+	// Tester si on echappe en span ou en div
+	$mode = preg_match(',</?('._BALISES_BLOCS.')[>[:space:]],i', $rempl) ?
 		'div' : 'span';
 	$nn = ($mode == 'div') ? "\n\n" : '';
 
@@ -152,7 +152,6 @@ function echappe_html($letexte, $source='', $no_transform=false) {
 				."class='spip_cadre' dir='ltr'>"
 				.$echap
 				."</textarea></div></form>";
-				$mode = "div";
 				break;
 
 		}
diff --git a/formulaires/inc-formulaire_forum.php3 b/formulaires/inc-formulaire_forum.php3
index f78dc39299..48e57ee001 100644
--- a/formulaires/inc-formulaire_forum.php3
+++ b/formulaires/inc-formulaire_forum.php3
@@ -272,10 +272,11 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 }
 
 
-function barre_forum($texte)
-{
+function barre_forum($texte) {
 	include_ecrire('inc_layer');
 
+	$texte = entites_html($texte);
+
 	if (!$GLOBALS['browser_barre'])
 		return "<textarea name='texte' rows='12' class='forml' cols='40'>$texte</textarea>";
 	static $num_formulaire = 0;
-- 
GitLab